次のコードをwebpack 3から4に移行するのに助けが必要です。
new webpack.optimize.CommonsChunkPlugin({
minChunks: module => module.context && module.context.indexOf("node_modules") !== -1,
name: "vendor",
chunks: ["main"]
})
2つのエントリファイルがあり、最初のファイルの依存関係のみをベンダーチャンクに含めるようにします。 2番目のエントリの依存関係は、すべて独自のバンドルにとどまる必要があります。
2つのエントリファイルがあり、最初のファイルの依存関係のみをベンダーチャンクに含めるようにします。 2番目のエントリの依存関係は、すべて独自のバンドルにとどまる必要があります。
エントリポイントがmain
とsecondary
であると仮定します:
entry: {
main: 'path-to/main.js',
secondary: 'path-to/secondary.js'
}
webpack-4 を使用すると、vendors
チャンクからmain
モジュールのみを抽出できますが、作成するsecondary
関数のtest
関数を使用して、そのチャンク内のcacheGroups
で参照される他のサードパーティモジュールを残すことができます。
optimization: {
splitChunks: {
cacheGroups: {
vendors: {
name: 'vendors',
chunks: 'all',
reuseExistingChunk: true,
priority: 1,
enforce: true,
test(module, chunks) {
const name = module.nameForCondition && module.nameForCondition();
return chunks.some(chunk => {
return chunk.name === 'main' && /[\\/]node_modules[\\/]/.test(name);
});
}
},
secondary: {
name: 'secondary',
chunks: 'all',
priority: 2,
enforce: true,
test(module, chunks) {
return chunks.some(chunk => chunk.name === 'secondary');
}
}
}
}
}
これを理解するのにしばらく時間がかかりましたが、私にとって重要なことは、webpack 4のchunks
引数が特定のエントリのみを含めることができる関数を取るようになったことです。これは最近の変更だと思います。なぜなら、投稿時には公式のドキュメントにはなかったからです。
splitChunks: {
cacheGroups: {
vendor: {
name: 'vendor',
chunks: chunk => chunk.name == 'main',
reuseExistingChunk: true,
priority: 1,
test: module =>
/[\\/]node_modules[\\/]/.test(module.context),
minChunks: 1,
minSize: 0,
},
},
},