An In-Depth Tutorial on Angular Module Lazy Loading Using Webpack and NgRx

Lazy Loading in Angular

An In-Depth Tutorial on Angular Module Lazy Loading Using Webpack and NgRx



Lazy loading is an optimization strategy aimed at conserving resources by only loading software modules as they are needed, rather than loading everything upfront. In the context of Angular, it contributes to boosting app performance by decreasing initial loading time.

This article presents a detailed, step-by-step tutorial on how to implement lazy loading in Angular modules using Webpack and NgRx.

Getting Started

To follow this tutorial, you need a basic understanding of Angular, Angular CLI, Webpack, and NgRx. Additionally, you need to have Node.js and npm installed on your local development machine.

Step 1: Initial Angular Project Setup

Use the Angular CLI to establish a new Angular project. In your terminal, execute:

ng new lazy-load-app

The above command initializes a new Angular app named lazy-load-app.

Step 2: Package Installation

Now, install the necessary NgRx and Webpack packages by executing the following command:

npm install @ngrx/store @ngrx/effects webpack --save

This will add the required NgRx and Webpack packages to your project.

Step 3: Generating a Feature Module

Create a new feature module, which we’ll later lazy load. In this example, we’ll create a module named profile. Run the following command to create it:

ng generate module profile --route profile --module app.module

Step 4: Implementing Lazy Loading

After creating the profile module, configure the app’s routing to lazy load this module. Here’s the process:

Modify the routes array in the app-routing.module.ts file to include the profile module:

const routes: Routes = [
    path: 'profile',
    loadChildren: () => import('./profile/profile.module').then(m => m.ProfileModule)

This configuration directs Angular to load the ProfileModule when the /profile path is requested.

Step 5: Webpack Configuration

Next, add a Webpack configuration to bundle the app.

Create a new file called webpack.config.js in your project root and add the following configuration:

const path = require('path');

module.exports = {
  entry: './src/main.ts',
  resolve: {
    extensions: ['.ts', '.js'],
  module: {
    rules: [
        test: /\.tsx?$/,
        use: 'ts-loader',
        exclude: /node_modules/,
  output: {
    filename: 'bundle.js',
    path: path.resolve(__dirname, 'dist'),

This configuration instructs Webpack to start bundling from main.ts and to employ ts-loader for TypeScript files.

Step 6: Employing NgRx

NgRx is a powerful state management solution for Angular applications. It enables managing global state – such as the state of the profile module. To achieve this, you need to set up reducers, actions, and effects.

In the profile module, create a new file named profile.reducer.ts. Here’s an example of a simple reducer:

import { createReducer, on, Action } from '@ngrx/store';

export const initialState = {};

const _profileReducer = createReducer(
  // define actions here

export function profileReducer(state: any, action: Action) {
  return _profileReducer(state, action);

Actions can be defined in another file, say profile.actions.ts:

import { createAction } from '@ngrx/store';

export const loadProfile = createAction('[Profile] Load');

Effects can be specified in profile.effects.ts:

import { Injectable } from '@angular/core';
import { Actions, createEffect, ofType } from '@ngrx/effects';
import { loadProfile } from './profile.actions';

export class ProfileEffects {

  loadProfile$ = createEffect(() =>
      // add logic here

  constructor(private actions$: Actions) {}

Now, the loadProfile action can be dispatched when the ProfileModule is loaded.

Wrapping Up

In conclusion, this article offers a detailed walkthrough on setting up lazy loading in Angular applications using Webpack and NgRx. Lazy loading is a potent optimization strategy for your Angular apps, and tools like Webpack and NgRx can help manage how and when your modules load.

Remember, while this guide provides a foundational setup, each tool offers more depth to explore. Delve deeper into each to fully optimize your Angular application.


Leave a Reply

Your email address will not be published. Required fields are marked *

Supercharge Your Collaboration: Must-Have Microsoft Teams Plugins Top 7 data management tools Top 9 project management tools Top 10 Software Testing Tools Every QA Professional Should Know 9 KPIs commonly tracked closely in Manufacturing industry