如何指定不希望在Webpack 4中使用模块的块,假设我不希望供应商文件中出现破折号(无论后果如何),我该怎么办?
这是实际配置:
splitChunks: {
name: 'vendors',
maxAsyncRequests: 1,
maxInitialRequests: 2,
chunks: 'initial',
}
答案 0 :(得分:2)
test
也可以采用一种方法。这提供了很大的灵活性。例如。
vendor: {
test(mod/* , chunk */) {
// Only node_modules are needed
if (!mod.context.includes('node_modules')) {
return false;
}
// But not node modules that contain these key words in the path
if ([ 'lodash', 'react'].some(str => mod.context.includes(str))) {
return false;
}
return true;
},
name: 'vendor',
chunks: 'all',
reuseExistingChunk: true
},
答案 1 :(得分:2)
您可以使用负前瞻来实现:
test: /[\\/]node_modules[\\/]((?!(lodash)).*)[\\/]/
答案 2 :(得分:1)
用于将项目的所有依赖项从break
加载到名为/node_modules
的块中的配置如下所示:
vendors
因此对于您的用例,您可以修改RegExp以排除所需的任何模块。当然,缺点是您必须纠缠正则表达式,并且该特定测试条件的确切格式超出了我的专业知识。我知道optimization: {
splitChunks: {
cacheGroups: {
commons: { test: /[\\/]node_modules[\\/]/, name: "vendors", chunks: "all" }
}
}
}
上的文档仍然很少,所以我希望这至少可以帮助您指明正确的方向。
答案 3 :(得分:1)
您可以通过更新node_modules
属性来从test
中排除特定文件夹。在下面的示例中,我们创建了一个包含所有供应商的单一块,除了Lodash模块。
webpack.config.js
module.exports = {
//...
optimization: {
splitChunks: {
cacheGroups: {
vendor: {
test: /[\\/]node_modules[\\/](!lodash)[\\/]/,
name: 'vendor',
chunks: 'all',
}
}
}
}
};
答案 4 :(得分:0)
稍作修改的答案@ndequeker
test: /[\\/]node_modules[\\/](?!lodash)(.[a-zA-Z0-9.\-_]+)[\\/]/
对我有用