Q: Webpack 如何配置代码分割?chunks: 'all' 的含义是什么?如何提取公共代码?
代码分割是优化 Web 应用性能最主要的手段。 核心目标是:将大 Bundle 拆解成小块,按需加载,并最大化复用。
手动配置多个 Entry,输出多个 Bundle。
缺点:如果多个 Entry 都引入了同一个库 (e.g. lodash),这个库会被重复打包进每一个 Bundle,导致整体体积膨胀。
使用 import() 语法。Webpack 会自动将该模块打包成单独的文件,仅在运行时需要该模块时才请求。这对于路由懒加载是必须的。
Webpack 4+ 引入的 SplitChunksPlugin,旨在去重和分离代码。 核心配置:
'async' (默认,只分割异步代码), 'initial' (只分割同步代码), 'all' (全都分割)。
all 包含了同步代码,这意味着即使你没有用动态导入,只要你用了 react,splitChunks 也会把它单独提出来,利用浏览器缓存。HTTP/1.1 浏览器对同一个域名的并发请求数有限制 (Chrome 是 6 个)。如果首屏一次性加载几十个 JS 文件,会导致后续请求阻塞 (队头阻塞)。虽然 HTTP/2 解决了这个问题,但过多的请求带来的 RTT 和 Header 开销依然不可忽视。所以 Webpack 默认限制 30 个。
chunks: 'all' is best practice.