我尝试使用splitChunksPlugin将供应商deps和我的脚本分隔成单独的捆绑包,它似乎正在使用the example they provide。但是,我不认为缓存方面正在工作,因为webpacking项目将生成app-087620f3a62a222ec83e.js
和vendors-087620f3a62a222ec83e.js
文件,但是只对我的代码进行更改会为这两个文件生成新的哈希值,其中I希望供应商的哈希后缀保持不变。我的webpack配置中的输出对象是:
output: {
path: path.resolve(process.cwd(), 'dist'),
publicPath: '/',
filename: 'scripts/[name]-[hash].js'
},
我尝试将[hash]
更改为[chunkhash]
,根据文档guide to caching认为听起来更合理一些,但是webpack因错误而失败:
ERROR in chunk bundleUnAuth [entry] scripts/[chunkhash].js Cannot use [chunkhash] or [contenthash] for chunk in 'scripts/[chunkhash].js' (use [hash] instead)
commonsChunkPlugin
的替代品并不表示它需要NamedModulesPlugin
或HashedModuleIdsPlugin
作为its predecessor indicates it does这样的细微差别,可能会发生同样的事情。
答案 0 :(得分:0)
首先,您应该将runtimechunk字段与splitChunksPlugin一起使用。
例如:
runtimeChunk: {
name: 'manifest',
},
splitChunks: {
cacheGroups: {
commons: {
test: /[\\/]node_modules[\\/]/,
name: 'vendor',
chunks: 'all',
},
},
},
通过配置runtimeChunk
,将创建一个名为manifest
的新块。该主干包含webpack运行时和manifest
。每次更改代码时,manifest
都会发生变化。通过将其提取到单独的块,供应商主干的散列在构建之间将保持相同。
对于生产构建,还建议使用HashedModuleIdsPlugin
或NamedModulesPlugin
。因为当您重命名/移动应用程序代码时,他们可以保持供应商模块的模块ID保持不变。