-
-
Notifications
You must be signed in to change notification settings - Fork 384
using [name].[contenthash].css
for filename
is not deterministic
#701
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Comments
There is a ordered method called |
What would be good thing to use in |
Yes identifier is a good choice. There are a few comparators in |
I'll open PR changing from But looking through existing issues and PRs I noticed #454 / #482 which is somewhat related (just "reverse" problem) and thinking if changing order here will not make that issue worse. I also found now closed similar issue #512 which pretty much sounds like same thing I described and was marked as solved (was the issue re-introduced or was it never actually fixed?) Lastly - I do wonder how I could add reliable tests for this - it seems to me to ensure that things are tested I would have to construct |
12.18.2
7.5.2
5.22.0
1.3.7
Expected Behavior
contentHash
to be stable and deterministicActual Behavior
Building same project without making changes between build will "randomly" result in different
contentHash
sometimesCode
I don't have minimal reproduction, but I did bit of a code dive so hopefully following explanation could replace reproduction setup.
In
mini-css-extract-plugin/src/index.js
Lines 532 to 556 in 6009bd2
webpack@5
chunkGraph
is used.chunkGraph.getChunkModulesIterableBySourceType(chunk, MODULE_TYPE);
returnSortedSet
of modules, however they are actually not sorted. Per https://github.com/webpack/webpack/blob/911ec1aa67011e25aa1449610f5b0b557edd5459/test/SortableSet.unittest.js it seemsSortedSet
means that it exposes.sort()
method to get the Set sorted.Later on
m.updateHash(hash, { chunkGraph });
is called in order of modules in theSortedSet
(which actually isn't sorted, and order of modules actually seem that can change between builds). Finally this result incontentHash
that is generated not to be stable/deterministic.For part about
getChunkModulesIterableBySourceType
returning unsorted modules I find minor mention in https://github.com/webpack/webpack/projects/6 :And following code for that method ( https://github.com/webpack/webpack/blob/05768d9029b9024d9a8d5f1aa56e649d9b963f57/lib/ChunkGraph.js#L538-L549 for entry), we can see that
SortedSet
is used (inmodulesBySourceType
implementation), but.sort()
or.sortWith()
is not called on it resulting in preserving order of module creation (?) which itself is probably not deterministic due to lot of async execution.How Do We Reproduce?
As mentioned above - I don't have minimal reproduction for this problem, but I hope my research and description explain the issue well?
The text was updated successfully, but these errors were encountered: