我正在寻找Webpack中这两个选项之间差异的清晰解释。我已经阅读了这里的描述,但是差异不清楚。引用该描述:
将optimization.splitChunks.chunks选项设置为"all",初始块将受到影响(即使没有动态导入)。这样,代码块甚至可以在入口点和按需加载之间共享。
将optimization.splitChunks.chunks选项设置为"all",初始块将受到影响(即使没有动态导入)。这样,代码块甚至可以在入口点和按需加载之间共享。
尝试提供最简单的解释。这就是将要转换和捆绑的文件:
//app.js
import "my-static-module";
if(some_condition_is_true){
import ("my-dynamic-module")
}
console.log("My app is running")
现在看看不同的优化类型将如何处理它。
async(默认):
将创建两个文件。
initial:
将创建三个文件
all:
将创建两个文件
"all"将具有最小的总大小。
all
表示动态导入的模块和静态导入的模块都将被选择进行优化。 initial
表示只有静态导入的模块会被选择进行优化。
引用自Webpack文档:
可能的值有'all'、'async'和'initial'。提供'all'可以特别强大,因为这意味着chunk可以在异步和非异步chunk之间共享。
扩展@Sujaan Singh分享的示例,考虑splitChunks.minSize等于零。
这些是将被转译和捆绑的文件:
//app.js
import "my-static-module";
import "my-static-vendor-module"
if(some_condition_is_true){
import ("my-dynamic-module")
}
else{
import ("my-dynamic-module-1")
}
console.log("My app is running")
//my-dynamic-module.js
import "my-static-module-1";
//my-dynamic-module-1.js
import "my-static-module-1";
现在看看不同的优化类型如何处理它。
async(默认):
将创建四个文件。
all:
将创建五个文件
initial:
将创建四个文件
SplitChunksPlugin使用的默认缓存组:
default: {
idHint: "",
reuseExistingChunk: true,
minChunks: 2,
priority: -20
},
defaultVendors: {
idHint: "vendors",
reuseExistingChunk: true,
test: NODE_MODULES_REGEXP,
priority: -10
}