基于组件拆分 Angular 应用程序的主 JS 包

Posted

技术标签:

【中文标题】基于组件拆分 Angular 应用程序的主 JS 包【英文标题】:Split main JS bundle of an angular app based on component 【发布时间】:2019-04-29 07:48:48 【问题描述】:

我开发了一个angular 4 web应用程序,它有3个组件,都是独立的组件。

LoginPage
FormPage
Dashboard

LoginPage 和 FormPage 是小组件,但 Dashboard 是一个非常大的模块。

我的问题是我不想在登录页面上下载整个主包(1.5mb)(页面加载需要更多时间来下载整个内容)。我想在仪表板组件加载时下载仪表板组件相关的 JS 文件块。

我正在使用 ng-build --prod 进行生产构建

是否可以根据组件拆分主bundle js?我也可以在供应商 JS 中进行同样的拆分吗?

【问题讨论】:

【参考方案1】:

您可以使用 Angular 路由器 loadChildren 来延迟加载模块。根据用户访问URL,按需加载其对应的模块。

import  NgModule  from '@angular/core';
import  RouterModule, Routes  from '@angular/router';

const app_routes: Routes = [
  
    path: 'login',
    loadChildren: 'app/login/login.module#LoginModule'
  ,
  
    path: 'dashboard',
    loadChildren: 'app/dashboard/dashboard.module#DashboardModule'
  ,
   path: '', pathMatch: 'full', redirectTo: '/login' ,
   path: '**', pathMatch: 'full', redirectTo: '/login' 
];

@NgModule(
  imports: [RouterModule.forRoot(app_routes)],
  exports: [RouterModule]
)
export class AppRoutingModule 

【讨论】:

以上是关于基于组件拆分 Angular 应用程序的主 JS 包的主要内容,如果未能解决你的问题,请参考以下文章

基于angular的分页组件插件,使用directive,将directive的内容放到js文件中,直接引用即可

从 app.js 主模块中隐藏组件内的插件

Angular 1.5 组件:基于组件的应用程序架构

Angular:如何拆分(划分)控制器的脚本? [复制]

基于Angular2+的Tab页+侧边菜单比较完整的解决方案

基于requirejs和angular搭建spa应用