1

伙计们,我有一个启用延迟加载的 Angular 应用程序,并且在模块之下。

CoreModule, (app 模块中导入)
SharedModule, (各个模块中导入)
ProjectsModule,
AuthModule

这是我的应用路由模块:

    { path: "",             redirectTo: "auth/sign-in", pathMatch: "full" },
// { path: "auth",      loadChildren: () => AuthModule }, // Bundled in main js file
{ path: "auth",         loadChildren: () => import("@core/auth/auth.module").then(p => p.AuthModule) },
{ path: "projects",     loadChildren: () => import("@projects/projects.module").then(p => p.ProjectsModule) }

在根应用程序路由模块中使用动态导入语法时,在浏览器中获取的 javascript 包如下:(刷新 /auth/sign-in)

  • 核心认证认证模块.js
  • 默认~core-auth-auth-module~projects-projects-module.js
  • 项目-项目-module.js(预加载)

1- 那么模块 1 和 2 到底是什么?

然后,当我在 loadchildren 上使用函数语法时,前 2 个模块不会在浏览器中加载。

2-有什么区别?

4

1 回答 1

2

不同之处在于,在使用import关键字的情况下,您的模块会延迟加载,而loadChildren: () => AuthModule语法会将 AuthModule 捆绑在主 js 文件中。

- 那么模块 1 和模块 2 到底是什么?

你告诉 Angular(webpack) 使用import关键字延迟加载 AuthModule。Webpack 注意到了这条指令,并根据模块路径创建了专用的惰性块:

import("@core/auth/auth.module")
               ||
               \/
      core-auth-auth-module.js chunk

因此,第一个块是您AuthModule所在的位置。

但是 Angular CLI 在后台使用 webpack,它在 SplitChunksPlugin ref的帮助下在幕后发挥了一些作用。

这个 webpack 插件试图最小化代码中的重复并从惰性模块中提取额外的包。

default~core-auth-auth-module~projects-projects-module.js
                ||                        ||
                \/                        \/
            AuthModule                   ProjectsModule

AuthModule该块包含和之间共享的公共代码ProjectsModule

您还可以在我的文章中更深入地了解详细信息:

于 2020-08-13T20:35:29.037 回答