diff --git a/lib/Server.js b/lib/Server.js index 4a69255cf3..410be4bac6 100644 --- a/lib/Server.js +++ b/lib/Server.js @@ -65,12 +65,20 @@ function Server(compiler, options) { }); compiler.apply(progressPlugin); } - compiler.hooks.compile.tap('webpack-dev-server', invalidPlugin); - compiler.hooks.invalid.tap('webpack-dev-server', invalidPlugin); - compiler.hooks.done.tap('webpack-dev-server', (stats) => { - this._sendStats(this.sockets, stats.toJson(clientStats)); - this._stats = stats; - }); + + const addCompilerHooks = (comp) => { + comp.hooks.compile.tap('webpack-dev-server', invalidPlugin); + comp.hooks.invalid.tap('webpack-dev-server', invalidPlugin); + comp.hooks.done.tap('webpack-dev-server', (stats) => { + this._sendStats(this.sockets, stats.toJson(clientStats)); + this._stats = stats; + }); + }; + if (compiler.compilers) { + compiler.compilers.forEach(addCompilerHooks); + } else { + addCompilerHooks(compiler); + } // Init express server const app = this.app = new express(); // eslint-disable-line diff --git a/test/MultiCompiler.test.js b/test/MultiCompiler.test.js new file mode 100644 index 0000000000..d4567647f7 --- /dev/null +++ b/test/MultiCompiler.test.js @@ -0,0 +1,23 @@ +'use strict'; + +const request = require('supertest'); +const helper = require('./helper'); +const config = require('./fixtures/multi-compiler-config/webpack.config'); + +describe('MultiCompiler', () => { + let server; + let req; + before((done) => { + server = helper.start(config, {}, done); + req = request(server.app); + }); + + after(helper.close); + + // TODO: this is a very basic test, optimally it should test multiple configs etc. + it('GET request to bundle', (done) => { + req.get('/main.js') + .expect('Content-Type', 'application/javascript; charset=UTF-8') + .expect(200, done); + }); +}); diff --git a/test/fixtures/multi-compiler-config/foo.js b/test/fixtures/multi-compiler-config/foo.js new file mode 100644 index 0000000000..eab26534f3 --- /dev/null +++ b/test/fixtures/multi-compiler-config/foo.js @@ -0,0 +1,3 @@ +'use strict'; + +console.log('Hey.'); diff --git a/test/fixtures/multi-compiler-config/webpack.config.js b/test/fixtures/multi-compiler-config/webpack.config.js new file mode 100644 index 0000000000..0113e6c89b --- /dev/null +++ b/test/fixtures/multi-compiler-config/webpack.config.js @@ -0,0 +1,11 @@ +'use strict'; + +module.exports = [{ + mode: 'development', + context: __dirname, + entry: './foo.js', + output: { + path: '/' + }, + node: false +}];