Angular 什么是common.chunk.js?

Angular 什么是common.chunk.js?,angular,webpack,angular-cli,Angular,Webpack,Angular Cli,我有一个Angular 5应用程序,运行Angular cli 1.6.6,当捆绑我的应用程序时,我(在所有其他应用程序中)有一个common.chunk.js 你知道那是什么吗?它与我的任何模块都不匹配,它也不是供应商或main或polyfill,因为它们有专用块 显然,这是一个常见的网页块 可以使用--无公共块来禁用它公共块是一个放置多个功能模块使用的所有内容的位置 假设您在自定义网格模块中有一个自定义网格组件。然后将此网格模块导入到用户和管理员功能模块中。由于网格模块在多个功能模块中使用,

我有一个Angular 5应用程序,运行Angular cli 1.6.6,当捆绑我的应用程序时,我(在所有其他应用程序中)有一个common.chunk.js

你知道那是什么吗?它与我的任何模块都不匹配,它也不是供应商mainpolyfill,因为它们有专用块


显然,这是一个常见的网页块


可以使用
--无公共块来禁用它

公共块是一个放置多个功能模块使用的所有内容的位置

假设您在自定义
网格
模块中有一个自定义网格组件。然后将此网格模块导入到
用户
管理员
功能模块中。由于
网格
模块在多个功能模块中使用,Webpack将其缝合为其他功能模块所依赖的
通用.chunk

如果在块命名关闭的情况下运行生成(
--named chunks false
-在
--prod
生成中默认使用),
common.chunk
将变为
0.chunk
-必须在任何其他惰性块之前加载的第0个块

这样做的一个缺点是,如果你的应用程序中有很多小的惰性模块(我认为从屏幕截图判断就是这样),那么
common.chunk
将开始特别迅速地膨胀。假设您的两个懒惰模块使用了一些很棒(但又胖)的图表库。来自图表库的所有摇动过的代码都将在
common.chunk
中结束。即使其他惰性模块不使用这堆图表代码,它们仍然依赖于
common.chunk
,并将加载和执行它们不需要的所有图表代码

要查看什么是什么,可以使用
webpack bundle analyzer
检查构建块的内部。您可以
npmi--D
it,也可以使用
npx
来避免开发依赖项膨胀

ng build --prod --stats-json && npx webpack-bundle-analyzer dist/stats.json

希望这有点帮助:-)

回答得不错,但是没有办法告诉你这样的话——“不要把这个放在公共块中”或者“不要把任何东西放在公共块中,除非它已经在超过X个功能模块中使用过”或者“不要把任何超过xyz大小的东西放在公共块中”?我不这么认为。。。您可以通过弹出您的Webpack配置并自己指定行为来实现这一点。另一方面,
ng 6
应该能够通过创建“中间”公共捆绑包来优化公共捆绑包问题-例如,
A
B
仅用于模块
X
和模块
Y
->公共块,仅包含
A
B
的内容将被生成,并且仅由
X
Y
的捆绑包依赖。我认为这应该在Ivy编译器发布的某个时候出现。谢谢,现在花几个小时升级到ng 6是不可避免的。哦,高兴days@AugieGardner它起作用了吗?我升级了,除了common.js之外没有看到任何东西。我正在将
“enableIvy”:true
传递到
angularCompilerOptions
中,正如它在这里所说的那样。@Michael Pearson Ivy还没有准备好被使用,只是在修补。如果您正确地设置了延迟加载,那么应该会弹出新的捆绑包,在使用它的延迟模块之间聚合共享功能。公共块仍然存在,但只包含许多惰性模块所使用的功能(这会使它变得更小——在我的例子中,它从1.2MB下降到25kB)。