Skip to content

Commit 8f89c01

Browse files
fix: support webpack@5 (#2359)
1 parent 3203688 commit 8f89c01

14 files changed

+166
-192
lines changed

azure-pipelines.yml

+48-19
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,13 @@ trigger:
22
- master
33
- next
44

5+
variables:
6+
npm_config_cache: $(Pipeline.Workspace)/.npm
7+
58
jobs:
69
- job: Lint
710
pool:
8-
vmImage: ubuntu-16.04
11+
vmImage: ubuntu-latest
912
steps:
1013
- task: NodeTool@0
1114
inputs:
@@ -20,10 +23,12 @@ jobs:
2023
node -v
2124
npm -v
2225
displayName: 'Print versions'
23-
- task: Npm@1
26+
- task: CacheBeta@1
2427
inputs:
25-
command: custom
26-
customCommand: ci
28+
key: npm | $(Agent.OS) | package-lock.json
29+
path: $(npm_config_cache)
30+
displayName: 'Cache npm'
31+
- script: npm ci
2732
displayName: 'Install dependencies'
2833
- script: npm run lint
2934
displayName: 'Run lint'
@@ -34,10 +39,13 @@ jobs:
3439

3540
- job: Linux
3641
pool:
37-
vmImage: ubuntu-16.04
42+
vmImage: ubuntu-latest
3843
strategy:
39-
maxParallel: 5
44+
maxParallel: 6
4045
matrix:
46+
node-13:
47+
node_version: ^13.0.0
48+
webpack_version: latest
4149
node-12:
4250
node_version: ^12.0.0
4351
webpack_version: latest
@@ -50,6 +58,9 @@ jobs:
5058
node-6:
5159
node_version: ^6.9.0
5260
webpack_version: latest
61+
node-10-canary:
62+
node_version: ^10.13.0
63+
webpack_version: next
5364
steps:
5465
- task: NodeTool@0
5566
inputs:
@@ -64,10 +75,12 @@ jobs:
6475
node -v
6576
npm -v
6677
displayName: 'Print versions'
67-
- task: Npm@1
78+
- task: CacheBeta@1
6879
inputs:
69-
command: custom
70-
customCommand: ci
80+
key: npm | $(Agent.OS) | package-lock.json
81+
path: $(npm_config_cache)
82+
displayName: 'Cache npm'
83+
- script: npm ci
7184
displayName: 'Install dependencies'
7285
- script: npm i webpack@$(webpack_version)
7386
displayName: 'Install "webpack@$(webpack_version)"'
@@ -85,10 +98,13 @@ jobs:
8598

8699
- job: macOS
87100
pool:
88-
vmImage: macOS-10.14
101+
vmImage: macOS-latest
89102
strategy:
90-
maxParallel: 5
103+
maxParallel: 6
91104
matrix:
105+
node-13:
106+
node_version: ^13.0.0
107+
webpack_version: latest
92108
node-12:
93109
node_version: ^12.0.0
94110
webpack_version: latest
@@ -101,6 +117,9 @@ jobs:
101117
node-6:
102118
node_version: ^6.9.0
103119
webpack_version: latest
120+
node-10-canary:
121+
node_version: ^10.13.0
122+
webpack_version: next
104123
steps:
105124
- task: NodeTool@0
106125
inputs:
@@ -115,10 +134,12 @@ jobs:
115134
node -v
116135
npm -v
117136
displayName: 'Print versions'
118-
- task: Npm@1
137+
- task: CacheBeta@1
119138
inputs:
120-
command: custom
121-
customCommand: ci
139+
key: npm | $(Agent.OS) | package-lock.json
140+
path: $(npm_config_cache)
141+
displayName: 'Cache npm'
142+
- script: npm ci
122143
displayName: 'Install dependencies'
123144
- script: npm i webpack@$(webpack_version)
124145
displayName: 'Install "webpack@$(webpack_version)"'
@@ -136,10 +157,13 @@ jobs:
136157

137158
- job: Windows
138159
pool:
139-
vmImage: windows-2019
160+
vmImage: windows-latest
140161
strategy:
141-
maxParallel: 5
162+
maxParallel: 6
142163
matrix:
164+
node-13:
165+
node_version: ^13.0.0
166+
webpack_version: latest
143167
node-12:
144168
node_version: ^12.0.0
145169
webpack_version: latest
@@ -152,6 +176,9 @@ jobs:
152176
node-6:
153177
node_version: ^6.9.0
154178
webpack_version: latest
179+
node-10-canary:
180+
node_version: ^10.13.0
181+
webpack_version: next
155182
steps:
156183
- script: 'git config --global core.autocrlf input'
157184
displayName: 'Config git core.autocrlf'
@@ -169,10 +196,12 @@ jobs:
169196
node -v
170197
npm -v
171198
displayName: 'Print versions'
172-
- task: Npm@1
199+
- task: CacheBeta@1
173200
inputs:
174-
command: custom
175-
customCommand: ci
201+
key: npm | $(Agent.OS) | package-lock.json
202+
path: $(npm_config_cache)
203+
displayName: 'Cache npm'
204+
- script: npm ci
176205
displayName: 'Install dependencies'
177206
- script: npm i webpack@$(webpack_version)
178207
displayName: 'Install "webpack@$(webpack_version)"'

package.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -114,7 +114,7 @@
114114
"webpack-cli": "^3.3.10"
115115
},
116116
"peerDependencies": {
117-
"webpack": "^4.0.0"
117+
"webpack": "^4.0.0 || ^5.0.0"
118118
},
119119
"author": "Tobias Koppers @sokra",
120120
"bugs": "https://github.com/webpack/webpack-dev-server/issues",

test/cli/cli.test.js

+15-5
Original file line numberDiff line numberDiff line change
@@ -176,8 +176,9 @@ describe('CLI', () => {
176176

177177
it('should exit the process when SIGINT is detected, even before the compilation is done', (done) => {
178178
const cliPath = resolve(__dirname, '../../bin/webpack-dev-server.js');
179-
const examplePath = resolve(__dirname, '../../examples/cli/public');
180-
const cp = execa('node', [cliPath], { cwd: examplePath });
179+
const simpleConfig = resolve(__dirname, '../fixtures/simple-config');
180+
const cp = execa('node', [cliPath], { cwd: simpleConfig });
181+
181182
let killed = false;
182183

183184
cp.stdout.on('data', () => {
@@ -197,11 +198,13 @@ describe('CLI', () => {
197198

198199
it('should use different random port when multiple instances are started on different processes', (done) => {
199200
const cliPath = resolve(__dirname, '../../bin/webpack-dev-server.js');
200-
const examplePath = resolve(__dirname, '../../examples/cli/public');
201+
const simpleConfig = resolve(__dirname, '../fixtures/simple-config');
201202

202-
const cp = execa('node', [cliPath, '--colors=false'], { cwd: examplePath });
203+
const cp = execa('node', [cliPath, '--colors=false'], {
204+
cwd: simpleConfig,
205+
});
203206
const cp2 = execa('node', [cliPath, '--colors=false'], {
204-
cwd: examplePath,
207+
cwd: simpleConfig,
205208
});
206209

207210
const runtime = {
@@ -220,22 +223,27 @@ describe('CLI', () => {
220223
const portMatch = /Project is running at http:\/\/localhost:(\d*)\//.exec(
221224
bits
222225
);
226+
223227
if (portMatch) {
224228
runtime.cp.port = portMatch[1];
225229
}
230+
226231
if (/Compiled successfully/.test(bits)) {
227232
expect(cp.pid !== 0).toBe(true);
228233
cp.kill('SIGINT');
229234
}
230235
});
236+
231237
cp2.stdout.on('data', (data) => {
232238
const bits = data.toString();
233239
const portMatch = /Project is running at http:\/\/localhost:(\d*)\//.exec(
234240
bits
235241
);
242+
236243
if (portMatch) {
237244
runtime.cp2.port = portMatch[1];
238245
}
246+
239247
if (/Compiled successfully/.test(bits)) {
240248
expect(cp.pid !== 0).toBe(true);
241249
cp2.kill('SIGINT');
@@ -249,8 +257,10 @@ describe('CLI', () => {
249257
done();
250258
}
251259
});
260+
252261
cp2.on('exit', () => {
253262
runtime.cp2.done = true;
263+
254264
if (runtime.cp.done) {
255265
expect(runtime.cp.port !== runtime.cp2.port).toBe(true);
256266
done();

test/e2e/ClientOptions.test.js

+2-1
Original file line numberDiff line numberDiff line change
@@ -324,7 +324,8 @@ describe('Client console.log', () => {
324324
});
325325
})
326326
.then(() => {
327-
expect(res).toMatchSnapshot();
327+
// Order doesn't matter, maybe we should improve that in future
328+
expect(res.sort()).toMatchSnapshot();
328329
done();
329330
});
330331
});

test/e2e/Iframe.test.js

+2-1
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,8 @@ describe('Client iframe console.log', () => {
8484
});
8585
})
8686
.then(() => {
87-
expect(res).toMatchSnapshot();
87+
// Order doesn't matter, maybe we should improve that in future
88+
expect(res.sort()).toMatchSnapshot();
8889
done();
8990
});
9091
});

test/e2e/__snapshots__/ClientOptions.test.js.snap

+1-1
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,8 @@ Array [
1515

1616
exports[`Client console.log hot enabled 1`] = `
1717
Array [
18-
"[HMR] Waiting for update signal from WDS...",
1918
"Hey.",
19+
"[HMR] Waiting for update signal from WDS...",
2020
"[WDS] Hot Module Replacement enabled.",
2121
"[WDS] Live Reloading enabled.",
2222
]

test/e2e/__snapshots__/Iframe.test.js.snap

+1-1
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,8 @@ Array [
1515

1616
exports[`Client iframe console.log hot enabled 1`] = `
1717
Array [
18-
"[HMR] Waiting for update signal from WDS...",
1918
"Hey.",
19+
"[HMR] Waiting for update signal from WDS...",
2020
"[WDS] Hot Module Replacement enabled.",
2121
"[WDS] Live Reloading enabled.",
2222
]

test/server/Server.test.js

+31-39
Original file line numberDiff line numberDiff line change
@@ -39,9 +39,9 @@ describe('Server', () => {
3939
return relative('.', p).split(sep);
4040
})
4141
).toMatchSnapshot();
42-
expect(
43-
server.middleware.context.compiler.options.plugins
44-
).toMatchSnapshot();
42+
expect(server.middleware.context.compiler.options.plugins).toEqual([
43+
new webpack.HotModuleReplacementPlugin(),
44+
]);
4545

4646
compiler.hooks.done.tap('webpack-dev-server', () => {
4747
server.close(done);
@@ -64,9 +64,9 @@ describe('Server', () => {
6464
return relative('.', p).split(sep);
6565
})
6666
).toMatchSnapshot();
67-
expect(
68-
server.middleware.context.compiler.options.plugins
69-
).toMatchSnapshot();
67+
expect(server.middleware.context.compiler.options.plugins).toEqual([
68+
new webpack.HotModuleReplacementPlugin(),
69+
]);
7070

7171
compiler.hooks.done.tap('webpack-dev-server', () => {
7272
server.close(done);
@@ -78,14 +78,6 @@ describe('Server', () => {
7878

7979
// issue: https://github.com/webpack/webpack-dev-server/issues/1724
8080
describe('express.static.mine.types', () => {
81-
beforeEach(() => {
82-
jest.resetModules();
83-
});
84-
85-
afterEach(() => {
86-
jest.unmock('express');
87-
});
88-
8981
it("should success even if mine.types doesn't exist", (done) => {
9082
jest.mock('express', () => {
9183
const data = jest.requireActual('express');
@@ -118,31 +110,6 @@ describe('Server', () => {
118110
});
119111
});
120112

121-
describe('WEBPACK_DEV_SERVER environment variable', () => {
122-
const OLD_ENV = process.env;
123-
124-
beforeEach(() => {
125-
// this is important - it clears the cache
126-
jest.resetModules();
127-
128-
process.env = { ...OLD_ENV };
129-
130-
delete process.env.WEBPACK_DEV_SERVER;
131-
});
132-
133-
afterEach(() => {
134-
process.env = OLD_ENV;
135-
});
136-
137-
it('should be present', () => {
138-
expect(process.env.WEBPACK_DEV_SERVER).toBeUndefined();
139-
140-
require('../../lib/Server');
141-
142-
expect(process.env.WEBPACK_DEV_SERVER).toBe(true);
143-
});
144-
});
145-
146113
describe('Invalidate Callback', () => {
147114
describe('Testing callback functions on calling invalidate without callback', () => {
148115
it('should be `noop` (the default callback function)', (done) => {
@@ -178,4 +145,29 @@ describe('Server', () => {
178145
});
179146
});
180147
});
148+
149+
describe('WEBPACK_DEV_SERVER environment variable', () => {
150+
const OLD_ENV = process.env;
151+
152+
beforeEach(() => {
153+
// this is important - it clears the cache
154+
jest.resetModules();
155+
156+
process.env = { ...OLD_ENV };
157+
158+
delete process.env.WEBPACK_DEV_SERVER;
159+
});
160+
161+
afterEach(() => {
162+
process.env = OLD_ENV;
163+
});
164+
165+
it('should be present', () => {
166+
expect(process.env.WEBPACK_DEV_SERVER).toBeUndefined();
167+
168+
require('../../lib/Server');
169+
170+
expect(process.env.WEBPACK_DEV_SERVER).toBe(true);
171+
});
172+
});
181173
});

0 commit comments

Comments
 (0)