From 0fcc123e60ade7ad12dba863adc1efc4f3eff55c Mon Sep 17 00:00:00 2001 From: evilebottnawi Date: Wed, 25 Dec 2019 19:05:14 +0300 Subject: [PATCH] fix: improve contenthash generation --- src/index.js | 14 ++++++++++++- .../expected/1.b4a632ef8b77c78ccb5c.css | 8 +++++++ .../expected/2.8f15db7aad5338851c84.css | 8 +++++++ .../index.js | 5 +++++ .../one.js | 4 ++++ .../style1.css | 3 +++ .../style2.css | 3 +++ .../two.js | 4 ++++ .../webpack.config.js | 21 +++++++++++++++++++ 9 files changed, 69 insertions(+), 1 deletion(-) create mode 100644 test/cases/content-async-entries-with-same-import/expected/1.b4a632ef8b77c78ccb5c.css create mode 100644 test/cases/content-async-entries-with-same-import/expected/2.8f15db7aad5338851c84.css create mode 100644 test/cases/content-async-entries-with-same-import/index.js create mode 100644 test/cases/content-async-entries-with-same-import/one.js create mode 100644 test/cases/content-async-entries-with-same-import/style1.css create mode 100644 test/cases/content-async-entries-with-same-import/style2.css create mode 100644 test/cases/content-async-entries-with-same-import/two.js create mode 100644 test/cases/content-async-entries-with-same-import/webpack.config.js diff --git a/src/index.js b/src/index.js index d9f6bf2d..687c4b0a 100644 --- a/src/index.js +++ b/src/index.js @@ -221,9 +221,21 @@ class MiniCssExtractPlugin { compilation.hooks.contentHash.tap(pluginName, (chunk) => { const { outputOptions } = compilation; - const { hashFunction, hashDigest, hashDigestLength } = outputOptions; + const { + hashSalt, + hashDigest, + hashDigestLength, + hashFunction, + } = outputOptions; const hash = createHash(hashFunction); + if (hashSalt) { + hash.update(hashSalt); + } + + hash.update(`${chunk.id} `); + hash.update(chunk.ids ? chunk.ids.join(',') : ''); + for (const m of chunk.modulesIterable) { if (m.type === MODULE_TYPE) { m.updateHash(hash); diff --git a/test/cases/content-async-entries-with-same-import/expected/1.b4a632ef8b77c78ccb5c.css b/test/cases/content-async-entries-with-same-import/expected/1.b4a632ef8b77c78ccb5c.css new file mode 100644 index 00000000..f6a43c7e --- /dev/null +++ b/test/cases/content-async-entries-with-same-import/expected/1.b4a632ef8b77c78ccb5c.css @@ -0,0 +1,8 @@ +.a { + width: 100px; +} + +.b { + width: 100px; +} + diff --git a/test/cases/content-async-entries-with-same-import/expected/2.8f15db7aad5338851c84.css b/test/cases/content-async-entries-with-same-import/expected/2.8f15db7aad5338851c84.css new file mode 100644 index 00000000..c40231b8 --- /dev/null +++ b/test/cases/content-async-entries-with-same-import/expected/2.8f15db7aad5338851c84.css @@ -0,0 +1,8 @@ +.b { + width: 100px; +} + +.a { + width: 100px; +} + diff --git a/test/cases/content-async-entries-with-same-import/index.js b/test/cases/content-async-entries-with-same-import/index.js new file mode 100644 index 00000000..dc3542fd --- /dev/null +++ b/test/cases/content-async-entries-with-same-import/index.js @@ -0,0 +1,5 @@ +const app1 = import('./one'); +const app2 = import('./two'); + +console.log(app1); +console.log(app2); diff --git a/test/cases/content-async-entries-with-same-import/one.js b/test/cases/content-async-entries-with-same-import/one.js new file mode 100644 index 00000000..f9f16b34 --- /dev/null +++ b/test/cases/content-async-entries-with-same-import/one.js @@ -0,0 +1,4 @@ +import './style1.css'; +import './style2.css'; + +export default 'one'; diff --git a/test/cases/content-async-entries-with-same-import/style1.css b/test/cases/content-async-entries-with-same-import/style1.css new file mode 100644 index 00000000..6e0b4761 --- /dev/null +++ b/test/cases/content-async-entries-with-same-import/style1.css @@ -0,0 +1,3 @@ +.a { + width: 100px; +} diff --git a/test/cases/content-async-entries-with-same-import/style2.css b/test/cases/content-async-entries-with-same-import/style2.css new file mode 100644 index 00000000..16518354 --- /dev/null +++ b/test/cases/content-async-entries-with-same-import/style2.css @@ -0,0 +1,3 @@ +.b { + width: 100px; +} diff --git a/test/cases/content-async-entries-with-same-import/two.js b/test/cases/content-async-entries-with-same-import/two.js new file mode 100644 index 00000000..ea6f0b50 --- /dev/null +++ b/test/cases/content-async-entries-with-same-import/two.js @@ -0,0 +1,4 @@ +import './style2.css'; +import './style1.css'; + +export default 'two'; diff --git a/test/cases/content-async-entries-with-same-import/webpack.config.js b/test/cases/content-async-entries-with-same-import/webpack.config.js new file mode 100644 index 00000000..b317ec1c --- /dev/null +++ b/test/cases/content-async-entries-with-same-import/webpack.config.js @@ -0,0 +1,21 @@ +import Self from '../../../src'; + +module.exports = { + entry: './index.js', + module: { + rules: [ + { + test: /\.css$/, + use: [Self.loader, 'css-loader'], + }, + ], + }, + output: { + filename: '[name].[contenthash].js', + }, + plugins: [ + new Self({ + filename: '[name].[contenthash].css', + }), + ], +};