Skip to content

Commit e222c4e

Browse files
fix: behaviour in watch mode
1 parent 23dd998 commit e222c4e

13 files changed

+218
-197
lines changed

src/index.js

Lines changed: 18 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,8 @@ class CompressionPlugin {
7070
...this.options.compressionOptions,
7171
};
7272
}
73+
74+
this.emittedAssets = new Set();
7375
}
7476

7577
apply(compiler) {
@@ -93,13 +95,19 @@ class CompressionPlugin {
9395
// eslint-disable-next-line consistent-return
9496
async.forEach(
9597
Object.keys(assets),
96-
(file, cb) => {
97-
if (!ModuleFilenameHelpers.matchObject(this.options, file)) {
98+
(assetName, cb) => {
99+
if (!ModuleFilenameHelpers.matchObject(this.options, assetName)) {
100+
return cb();
101+
}
102+
103+
const assetSource = assets[assetName];
104+
105+
// Do not emit cached assets in watch mode
106+
if (this.emittedAssets.has(assetSource)) {
98107
return cb();
99108
}
100109

101-
const asset = assets[file];
102-
let input = asset.source();
110+
let input = assetSource.source();
103111

104112
if (!Buffer.isBuffer(input)) {
105113
input = Buffer.from(input);
@@ -114,13 +122,12 @@ class CompressionPlugin {
114122
return Promise.resolve()
115123
.then(() => {
116124
if (cache) {
117-
const { outputPath } = compiler;
118125
const cacheKey = serialize({
119126
// Invalidate cache after upgrade `zlib` module (build-in in `nodejs`)
120127
node: process.version,
121128
'compression-webpack-plugin': pkg.version,
122129
'compression-webpack-plugin-options': this.options,
123-
path: `${outputPath ? `${outputPath}/` : ''}${file}`,
130+
filename: assetName,
124131
hash: crypto.createHash('md4').update(input).digest('hex'),
125132
});
126133

@@ -142,11 +149,11 @@ class CompressionPlugin {
142149
return cb();
143150
}
144151

145-
const parse = url.parse(file);
152+
const parse = url.parse(assetName);
146153
const { pathname } = parse;
147154
const { dir, name, ext } = path.parse(pathname);
148155
const info = {
149-
file,
156+
file: assetName,
150157
path: pathname,
151158
dir: dir ? `${dir}/` : '',
152159
name,
@@ -164,8 +171,10 @@ class CompressionPlugin {
164171

165172
assets[newAssetName] = new RawSource(result);
166173

174+
this.emittedAssets.add(assetSource);
175+
167176
if (deleteOriginalAssets) {
168-
delete assets[file];
177+
delete assets[assetName];
169178
}
170179

171180
return cb();

test/__snapshots__/CompressionPlugin.test.js.snap.webpack5

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -15,20 +15,20 @@ Array [
1515
393,
1616
],
1717
Array [
18-
"async.async.js.gz?ver=4bda9ea18f58182e31c1",
19-
211,
18+
"async.async.js.gz?ver=5f4efddfc3b0d0f33fc4",
19+
205,
2020
],
2121
Array [
22-
"async.async.js?ver=4bda9ea18f58182e31c1",
23-
335,
22+
"async.async.js?ver=5f4efddfc3b0d0f33fc4",
23+
350,
2424
],
2525
Array [
26-
"main.js.gz?var=4bda9ea18f58182e31c1",
27-
3231,
26+
"main.js.gz?var=5f4efddfc3b0d0f33fc4",
27+
3222,
2828
],
2929
Array [
30-
"main.js?var=4bda9ea18f58182e31c1",
31-
13439,
30+
"main.js?var=5f4efddfc3b0d0f33fc4",
31+
13211,
3232
],
3333
]
3434
`;

test/__snapshots__/algorithm.test.js.snap.webpack5

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -20,19 +20,19 @@ Array [
2020
],
2121
Array [
2222
"async.async.735f6a02a2e820243759.js",
23-
335,
23+
350,
2424
],
2525
Array [
2626
"async.async.735f6a02a2e820243759.js.gz",
27-
211,
27+
205,
2828
],
2929
Array [
30-
"main.21aa9eec8b36c106feff.js",
31-
13280,
30+
"main.f210d52065e5e6030f3a.js",
31+
13052,
3232
],
3333
Array [
34-
"main.21aa9eec8b36c106feff.js.gz",
35-
3204,
34+
"main.f210d52065e5e6030f3a.js.gz",
35+
3195,
3636
],
3737
]
3838
`;
@@ -63,19 +63,19 @@ Array [
6363
],
6464
Array [
6565
"async.async.735f6a02a2e820243759.js",
66-
335,
66+
350,
6767
],
6868
Array [
6969
"async.async.735f6a02a2e820243759.js.gz",
70-
335,
70+
350,
7171
],
7272
Array [
73-
"main.21aa9eec8b36c106feff.js",
74-
13280,
73+
"main.f210d52065e5e6030f3a.js",
74+
13052,
7575
],
7676
Array [
77-
"main.21aa9eec8b36c106feff.js.gz",
78-
13280,
77+
"main.f210d52065e5e6030f3a.js.gz",
78+
13052,
7979
],
8080
]
8181
`;
@@ -104,11 +104,11 @@ Array [
104104
],
105105
Array [
106106
"async.async.735f6a02a2e820243759.js",
107-
335,
107+
350,
108108
],
109109
Array [
110-
"main.21aa9eec8b36c106feff.js",
111-
13280,
110+
"main.f210d52065e5e6030f3a.js",
111+
13052,
112112
],
113113
]
114114
`;

test/__snapshots__/cache-option.test.js.snap.webpack5

Lines changed: 38 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -20,19 +20,19 @@ Array [
2020
],
2121
Array [
2222
"async.async.735f6a02a2e820243759.js",
23-
335,
23+
350,
2424
],
2525
Array [
2626
"async.async.735f6a02a2e820243759.js.gz",
27-
211,
27+
205,
2828
],
2929
Array [
30-
"main.21aa9eec8b36c106feff.js",
31-
13280,
30+
"main.f210d52065e5e6030f3a.js",
31+
13052,
3232
],
3333
Array [
34-
"main.21aa9eec8b36c106feff.js.gz",
35-
3204,
34+
"main.f210d52065e5e6030f3a.js.gz",
35+
3195,
3636
],
3737
]
3838
`;
@@ -75,19 +75,19 @@ Array [
7575
],
7676
Array [
7777
"async.async.735f6a02a2e820243759.js",
78-
335,
78+
350,
7979
],
8080
Array [
8181
"async.async.735f6a02a2e820243759.js.gz",
82-
211,
82+
205,
8383
],
8484
Array [
85-
"main.21aa9eec8b36c106feff.js",
86-
13280,
85+
"main.f210d52065e5e6030f3a.js",
86+
13052,
8787
],
8888
Array [
89-
"main.21aa9eec8b36c106feff.js.gz",
90-
3204,
89+
"main.f210d52065e5e6030f3a.js.gz",
90+
3195,
9191
],
9292
]
9393
`;
@@ -112,38 +112,38 @@ Array [
112112
],
113113
Array [
114114
"async.async.735f6a02a2e820243759.js",
115-
335,
115+
350,
116116
],
117117
Array [
118118
"async.async.735f6a02a2e820243759.js.gz",
119-
211,
119+
205,
120120
],
121121
Array [
122-
"main.21aa9eec8b36c106feff.js",
123-
13280,
122+
"main.f210d52065e5e6030f3a.js",
123+
13052,
124124
],
125125
Array [
126-
"main.21aa9eec8b36c106feff.js.gz",
127-
3204,
126+
"main.f210d52065e5e6030f3a.js.gz",
127+
3195,
128128
],
129129
]
130130
`;
131131

132132
exports[`"cache" option matches snapshot for \`other-cache-directory\` value ({String}): async.async.735f6a02a2e820243759.js 1`] = `
133133
Array [
134134
"async.async.735f6a02a2e820243759.js",
135-
"175d7814c40e5cafbce1a36dbd855cdf",
135+
"bda8636f8681a0b701de559e671c70fb",
136136
]
137137
`;
138138

139139
exports[`"cache" option matches snapshot for \`other-cache-directory\` value ({String}): errors 1`] = `Array []`;
140140

141141
exports[`"cache" option matches snapshot for \`other-cache-directory\` value ({String}): errors 2`] = `Array []`;
142142

143-
exports[`"cache" option matches snapshot for \`other-cache-directory\` value ({String}): main.21aa9eec8b36c106feff.js 1`] = `
143+
exports[`"cache" option matches snapshot for \`other-cache-directory\` value ({String}): main.f210d52065e5e6030f3a.js 1`] = `
144144
Array [
145-
"main.21aa9eec8b36c106feff.js",
146-
"29376a39f634b629004bf86aabfbff42",
145+
"main.f210d52065e5e6030f3a.js",
146+
"f304c57e0a6cc45d6ce3aa62b6f7ece6",
147147
]
148148
`;
149149

@@ -185,19 +185,19 @@ Array [
185185
],
186186
Array [
187187
"async.async.735f6a02a2e820243759.js",
188-
335,
188+
350,
189189
],
190190
Array [
191191
"async.async.735f6a02a2e820243759.js.gz",
192-
211,
192+
205,
193193
],
194194
Array [
195-
"main.21aa9eec8b36c106feff.js",
196-
13280,
195+
"main.f210d52065e5e6030f3a.js",
196+
13052,
197197
],
198198
Array [
199-
"main.21aa9eec8b36c106feff.js.gz",
200-
3204,
199+
"main.f210d52065e5e6030f3a.js.gz",
200+
3195,
201201
],
202202
]
203203
`;
@@ -222,38 +222,38 @@ Array [
222222
],
223223
Array [
224224
"async.async.735f6a02a2e820243759.js",
225-
335,
225+
350,
226226
],
227227
Array [
228228
"async.async.735f6a02a2e820243759.js.gz",
229-
211,
229+
205,
230230
],
231231
Array [
232-
"main.21aa9eec8b36c106feff.js",
233-
13280,
232+
"main.f210d52065e5e6030f3a.js",
233+
13052,
234234
],
235235
Array [
236-
"main.21aa9eec8b36c106feff.js.gz",
237-
3204,
236+
"main.f210d52065e5e6030f3a.js.gz",
237+
3195,
238238
],
239239
]
240240
`;
241241

242242
exports[`"cache" option matches snapshot for \`true\` value ({Boolean}): async.async.735f6a02a2e820243759.js 1`] = `
243243
Array [
244244
"async.async.735f6a02a2e820243759.js",
245-
"175d7814c40e5cafbce1a36dbd855cdf",
245+
"bda8636f8681a0b701de559e671c70fb",
246246
]
247247
`;
248248

249249
exports[`"cache" option matches snapshot for \`true\` value ({Boolean}): errors 1`] = `Array []`;
250250

251251
exports[`"cache" option matches snapshot for \`true\` value ({Boolean}): errors 2`] = `Array []`;
252252

253-
exports[`"cache" option matches snapshot for \`true\` value ({Boolean}): main.21aa9eec8b36c106feff.js 1`] = `
253+
exports[`"cache" option matches snapshot for \`true\` value ({Boolean}): main.f210d52065e5e6030f3a.js 1`] = `
254254
Array [
255-
"main.21aa9eec8b36c106feff.js",
256-
"29376a39f634b629004bf86aabfbff42",
255+
"main.f210d52065e5e6030f3a.js",
256+
"f304c57e0a6cc45d6ce3aa62b6f7ece6",
257257
]
258258
`;
259259

test/__snapshots__/compressionOptions-option.test.js.snap.webpack5

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -20,19 +20,19 @@ Array [
2020
],
2121
Array [
2222
"async.async.735f6a02a2e820243759.js",
23-
335,
23+
350,
2424
],
2525
Array [
2626
"async.async.735f6a02a2e820243759.js.gz",
27-
211,
27+
205,
2828
],
2929
Array [
30-
"main.21aa9eec8b36c106feff.js",
31-
13280,
30+
"main.f210d52065e5e6030f3a.js",
31+
13052,
3232
],
3333
Array [
34-
"main.21aa9eec8b36c106feff.js.gz",
35-
3204,
34+
"main.f210d52065e5e6030f3a.js.gz",
35+
3195,
3636
],
3737
]
3838
`;
@@ -61,19 +61,19 @@ Array [
6161
],
6262
Array [
6363
"async.async.735f6a02a2e820243759.js",
64-
335,
64+
350,
6565
],
6666
Array [
6767
"async.async.735f6a02a2e820243759.js.gz",
68-
211,
68+
205,
6969
],
7070
Array [
71-
"main.21aa9eec8b36c106feff.js",
72-
13280,
71+
"main.f210d52065e5e6030f3a.js",
72+
13052,
7373
],
7474
Array [
75-
"main.21aa9eec8b36c106feff.js.gz",
76-
3204,
75+
"main.f210d52065e5e6030f3a.js.gz",
76+
3195,
7777
],
7878
]
7979
`;

0 commit comments

Comments
 (0)