Reputation: 581
Currently I am migrating some boilerplate code from Webpack v4 to v5 and I am stuck with the produced output.
In my webpack config, I use single-file entry & the splitChunks option to separate the game code from the libraries I am using.
optimization: {
splitChunks: {
chunks: "all",
},
}
output -
output: {
path: path.resolve(__dirname, "dist"),
filename: "game.[contenthash].js",
chunkFilename: "game-libraries.[contenthash].js",
},
So when I run the build I get the files split, but they both go with the filename structure.
ex produced build -
game.4c49dce85aa02822c28d.js
game.f4e81e5394bdc5feaa3b.js
And I feel like the chunkFilename option is being ignored.
What am i missing?
Upvotes: 7
Views: 12374
Reputation: 74
You are trying to have a custom name for you vendor libraries output file. Try adding this (webpack v5)
ENTRY: "game" keyword becomes [name] value in output. I suggest you to use "main" instead. Anyway, in your case:
entry: {
game: "./src/index.js",
},
OPTIMIZATION:
optimization: {
chunkIds: "named",
splitChunks: {
chunks: "all",
name: "vendors"
},
},
OUTPUT
output: {
path: path.resolve(__dirname, "dist"),
filename: "[name].[contenthash].js",
chunkFilename: "[name].[contenthash].js",
},
It should work. I had the same issue before.
Upvotes: 1
Reputation: 1
new webpack.optimize.LimitChunkCountPlugin({ maxChunks: 1 }),
add in plugin
Upvotes: -2
Reputation: 728
It seems that for webpack 5, chunkFileName
is only used for code splitting. To control the vendor chunk filename, change output.filename
to a function. Here is how I did it.
{
output: {
filename: pathData => {
let name = pathData.chunk.name;
//name will be undefined for vendors
if (name === undefined) {
name = pathData.chunk.id;
//id is very long by default, I chose to shorten it
if (name.includes('vendors-')) {
name = 'vendors';
}
}
return `${name}.js`;
}
}
Upvotes: 6
Reputation: 1290
It seem to be a chunk created by the default splitChunks configuration. Both entries share common modules. This is not affect by chunkFilename, but by filename
Reference: https://github.com/webpack/webpack/issues/9297 ..may be you are facing this issue ...filename is used for chunking filename
Upvotes: 2