webpack.js.org icon indicating copy to clipboard operation
webpack.js.org copied to clipboard

Chunk names do not respect filename setting if filename is a function

Open skylerberg opened this issue 1 year ago • 1 comments

Bug report

What is the current behavior?

Chunks will receive names containing a hash with this code:

output: {
      filename: '[name]-[contenthash].js',
}

Chunks will receive names without hashes (e.g., 113.js) with this code:

output: {
      filename: () => '[name]-[contenthash].js',
}

If the current behavior is a bug, please provide the steps to reproduce.

Here is a full minimal reproduction of the issue: https://github.com/skylerberg/webpack-chunk-name-issue

You can observe the behavior by downloading the repo and running:

$ npm install
$ npm run build
$ ls dist

You will see a chunk without a hash in its name.

What is the expected behavior?

I would expect identical behavior between the two examples above because the function version always resolves to the same string as the original snippet.

Other relevant information: webpack version: 5.89.0 Node.js version: v18.17.1 Operating System: Pop!_OS 20.04

It is possible to workaround this bug by explicitly setting chunkFilename. So I'm fine, but I wanted to report this so that it can get fixed and others won't be impacted by this surprising behavior.

skylerberg avatar Oct 20 '23 18:10 skylerberg

I want to say it is not a bug, there is our logic https://github.com/webpack/webpack/blob/main/lib/config/defaults.js#L835, we can't run the funtion before getting the name because we pass pathData to this function (https://webpack.js.org/configuration/output/#outputfilename), I want to say it is a limitation and we should improve our docs here

alexander-akait avatar Dec 28 '23 15:12 alexander-akait