webpack 3 合并 chunk 巨慢无比

2019-09-21 19:55:24 +08:00
 slucus

项目越来越大,使用 webpack 打出来的 chunk 高达 400 多个,为了优化请求数量,使用 webpack.optimize.LimitChunkCountPlugin 将 chunk 控制在了 12 个,但这样造成了一个问题,每次打包花在这上面的时间居然要将近 40 分钟。。。。

找了一圈也没有什么好的替代方案,各位大佬,有什么建议么?[抱拳了]

1696 次点击
所在节点    问与答
5 条回复
noe132
2019-09-21 20:12:58 +08:00
40 分钟是真的 niupi。

几个建议
升级 webpack4
使用 speed-measure-webpack-plugin 看看到底哪个 loader 慢
使用 webpack-bundle-analyzer 看看那些 module 是不需要的
是否使用了 import()而且使用的是非静态字符串,如 import(`path/${folder}/hi.js`)
silaike
2019-09-21 22:17:45 +08:00
exclude node_modules 了吗
slucus
2019-09-23 11:19:43 +08:00
现在问题已经定位到了。就是因为项目比较大,当时设计的时候为了后续维护方便,拆分了较多的 components,所以导致打包出来了 400 多个 js。。。

然后问题来了,当我们使用 webpack.optimize.LimitChunkCountPlugin 进行 js 合并的时候,就变动巨慢无比,想找个多进程的合并方法,但目前网上好像也没有这块相关的问题
slucus
2019-09-23 11:22:14 +08:00
@noe132 升级也考虑过,但成本太大了,而且会有额外的风险( 因为现在项目已经上线了 )
slucus
2020-06-24 17:48:36 +08:00
这个问题基本上算是解决了。
原因:使用了 import 的方式注册组件 ` () => import() `,使用这种方式,在打包的时候,会把组件打成单独的文件。项目初期这样是没什么问题的,但项目越来越大,组件越来越多。所以就会打出几百个单独的文件,但为了做请求优化,又要把这个几百个文件合并成 10 个左右,所以打包速度成倍增长。

解决方法:使用 require 注册组件。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/602912

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX