Skip to content

Commit bdc6829

Browse files
committed
fix(server): throw if multiple instances use the same compiler
1 parent b16e82a commit bdc6829

File tree

2 files changed

+28
-0
lines changed

2 files changed

+28
-0
lines changed

lib/Server.js

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,11 @@ class Server {
4242
constructor(compiler, options = {}) {
4343
validate(schema, options, 'webpack Dev Server');
4444

45+
if (compiler.devServer) {
46+
throw new Error('The compiler already has a dev server attached.');
47+
}
48+
compiler.devServer = this;
49+
4550
this.compiler = compiler;
4651
this.options = options;
4752
this.logger = this.compiler.getInfrastructureLogger('webpack-dev-server');

test/server/Server.test.js

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,29 @@ describe('Server', () => {
8585
});
8686
});
8787

88+
describe('devServer property of the compiler', () => {
89+
it('should reference the Server instance', (done) => {
90+
const compiler = webpack(config);
91+
const server = new Server(compiler, baseDevConfig);
92+
93+
compiler.hooks.done.tap('webpack-dev-server', () => {
94+
server.close(done);
95+
});
96+
97+
compiler.run(() => {});
98+
});
99+
100+
it('should prevent multiple Server instances from using the same compiler', () => {
101+
const compiler = webpack(config);
102+
let server = new Server(compiler, baseDevConfig);
103+
104+
expect(() => {
105+
// eslint-disable-next-line no-unused-vars
106+
server = new Server(compiler, baseDevConfig);
107+
}).toThrow();
108+
});
109+
});
110+
88111
it('test server error reporting', () => {
89112
const compiler = webpack(config);
90113
const server = new Server(compiler, baseDevConfig);

0 commit comments

Comments
 (0)