webpack的runtime chunk加载需要遵循先、后或任意顺序吗?
Webpack runtime chunk 页面引入顺序问题解答
核心结论
- 配置
runtimeChunk拆出独立runtime chunk的场景下,runtime chunk和vendor chunk、业务chunk的引入顺序无强制要求,可按任意顺序引入,都能正常运行。
原理说明
runtime chunk存放的是Webpack核心运行时代码,包含模块解析逻辑、模块缓存池、chunk间依赖映射表等基础调度能力,两个特性保证了加载顺序无限制:
- runtime代码仅会在作用域内挂载Webpack模块调度相关的公共方法与变量,不会主动执行其他chunk的业务逻辑,也不依赖其他chunk提前暴露的内容,无论早加载还是晚加载都不会触发报错。
- 其余vendor chunk、业务chunk的代码都是Webpack约定的模块注册格式,无论在runtime初始化前还是初始化后加载,只要最终所有被依赖的模块都完成注册,runtime调度时都能正常读取调用。
不同runtimeChunk配置的表现
你提到的两种常见配置拆分出的runtime chunk,都符合上述特性:
module.exports = [{ //... optimization: { runtimeChunk: true, splitChunks: { // configured to split vendor chunks } } //... }];
runtimeChunk: true会为每个入口单独生成对应的runtime chunk,每个入口对应自己的runtime调度逻辑。
module.exports = [{ //... optimization: { runtimeChunk: 'single', splitChunks: { // configured to split vendor chunks } } //... }];
runtimeChunk: 'single'会为所有入口生成全局共享的单个runtime chunk,统一调度所有模块。
注意事项
只有当你未开启runtimeChunk配置、runtime代码被内嵌到入口chunk中时,才需要保证入口chunk在所有依赖的vendor、公共chunk之后加载,避免出现依赖缺失的报错。
内容的提问来源于stack exchange,提问作者Luke
相关产品推荐
相关产品推荐

