如何在 Angular 2 应用程序上使用 webpack 进行代码拆分?

Posted

技术标签:

【中文标题】如何在 Angular 2 应用程序上使用 webpack 进行代码拆分?【英文标题】:How do I do code splitting with webpack on angular 2 app? 【发布时间】:2017-02-05 07:48:46 【问题描述】:

我有一个这样的应用结构:

├── /dashboard
│   ├── dashboard.css
│   ├── dashboard.html
│   ├── dashboard.component.ts
│   ├── dashboard.service.ts
│   ├── index.ts
├── /users
│   ├── users.css
│   ├── users.html
│   ├── users.component.ts
│   ├── users.service.ts
│   ├── index.ts
├── /login
│   ├── login.css
│   ├── login.html
│   ├── login.component.ts
│   ├── login.service.ts
│   ├── index.ts
├── app.component.ts
├── app.module.ts
├── app.routes.ts
├── app.styles.css

我想将我的应用程序拆分成这样的代码:

├── dashboard.js
├── users.js
├── login.js
├── app.js

我似乎找不到如何使用 webpack 做到这一点的示例。所以2个问题。这可以做到吗?还有,这怎么做?

任何线索或帮助将不胜感激。我整个上午都在研究这个。

Angular 文档建议使用 here,但我找不到任何示例或教程。所以这是可能的,但没有人知道怎么做?

你可以找到webpack配置here

【问题讨论】:

【参考方案1】:

您必须将它们中的每一个都作为入口点

entry: 
  'dashboard': './src/dashboard/index.ts',
  'users': './src/users/index.ts',
  'login': './src/login/index.ts',
  'app': './src/app.module.ts'

然后确保在不同的入口点之间没有重复的代码,将它们设置在 commons 块插件中。顺序是应用程序中遇到的重要代码,随后在仪表板中也很重要,否则用户只会出现在它存在/需要的最后一个中。

plugins: [
    new webpack.optimize.CommonsChunkPlugin(
       name: ['app', 'dashboard', 'login', 'users'] 
    )
]

您还可以从这里获得一些灵感: https://angular.io/docs/ts/latest/guide/webpack.html#!#common-configuration

【讨论】:

我没有得到预期的行为。我正在使用异步路由 ex: path: 'dashboard', loadChildren: () => System.import('./dashboard') ,但是当我在上面添加代码时,文件会在应用程序初始化时加载。也许我有一些不好的配置? 它现在是否生成单独的文件?你能把你的 webpack 配置添加到你的帖子中吗? 我添加了一个链接。 是不是因为 HtmlWebpackPlugin 会将所有的块注入到索引模板中?

以上是关于如何在 Angular 2 应用程序上使用 webpack 进行代码拆分?的主要内容,如果未能解决你的问题,请参考以下文章

如何在使用 Angular 7 和 Spring Boot 构建的 Web 应用程序中使浏览器缓存无效

如何将 Web api Windows 身份验证与 Angular 应用程序一起使用 [重复]

如何使用 Web 套接字和 Angular CLI 设置代理

如何在 Angular Web 中显示 blob 内容(doc、ppt、xls)

如何使用 Angular 2 在 POST 上启用 ASP.NET MVC 4 中的跨源请求

如何集成 Angular 2 + Java Maven Web 应用程序