diff --git a/client.js b/client.js index b857e8f..706ddb4 100644 --- a/client.js +++ b/client.js @@ -241,6 +241,9 @@ var subscribeAllHandler; function processMessage(obj) { switch (obj.action) { case 'building': + if (obj.name && options.name && obj.name !== options.name) { + return; + } if (options.log) { console.log( '[HMR] bundle ' + @@ -250,6 +253,9 @@ function processMessage(obj) { } break; case 'built': + if (obj.name && options.name && obj.name !== options.name) { + return; + } if (options.log) { console.log( '[HMR] bundle ' + diff --git a/middleware.js b/middleware.js index 55dd14c..c4fd6a1 100644 --- a/middleware.js +++ b/middleware.js @@ -1,4 +1,5 @@ module.exports = webpackHotMiddleware; +module.exports.createEventStream = createEventStream; var helpers = require('./helpers'); var pathMatch = helpers.pathMatch; @@ -12,7 +13,7 @@ function webpackHotMiddleware(compiler, opts) { opts.statsOptions = typeof opts.statsOptions == 'undefined' ? {} : opts.statsOptions; - var eventStream = createEventStream(opts.heartbeat); + var eventStream = opts.eventStream || createEventStream(opts.heartbeat); var latestStats = null; var closed = false; @@ -27,7 +28,7 @@ function webpackHotMiddleware(compiler, opts) { if (closed) return; latestStats = null; if (opts.log) opts.log('webpack building...'); - eventStream.publish({ action: 'building' }); + eventStream.publish({ action: 'building', name: compiler.name }); } function onDone(statsResult) { if (closed) return; diff --git a/test/client-test.js b/test/client-test.js index 189481f..a52366c 100644 --- a/test/client-test.js +++ b/test/client-test.js @@ -377,6 +377,7 @@ describe('client', function () { close: sinon.spy(), }), }; + s.stub(console, 'log'); }); beforeEach(loadClient); it('should not trigger webpack if event obj name is different', function () { @@ -409,6 +410,26 @@ describe('client', function () { ); sinon.assert.notCalled(processUpdate); }); + it('should not log building if obj name is different', function () { + var eventSource = window.EventSource.lastCall.returnValue; + eventSource.onmessage( + makeMessage({ + name: 'bar', + action: 'building', + }) + ); + sinon.assert.notCalled(console.log); + }); + it('should not log built if obj name is different', function () { + var eventSource = window.EventSource.lastCall.returnValue; + eventSource.onmessage( + makeMessage({ + name: 'bar', + action: 'built', + }) + ); + sinon.assert.notCalled(console.log); + }); }); context('with no browser environment', function () { diff --git a/test/middleware-test.js b/test/middleware-test.js index aadd680..28a8f52 100644 --- a/test/middleware-test.js +++ b/test/middleware-test.js @@ -19,6 +19,19 @@ describe('middleware', function () { .expect('Content-Type', /^text\/event-stream\b/) .end(done); }); + it('uses provided eventStream', function (done) { + setupServer({ + eventStream: { + handler: function (req, res) { + res.writeHead(201, { 'Content-Type': 'fake content type' }); + res.write('\n'); + }, + }, + })(); + request('/__webpack_hmr') + .expect('Content-Type', 'fake content type') + .end(done); + }); it('should heartbeat every 10 seconds', function (done) { request('/__webpack_hmr').end(function (err, res) { if (err) return done(err); @@ -48,13 +61,14 @@ describe('middleware', function () { if (err) return done(err); res.on('data', verify); - + compiler.name = 'test name'; compiler.emit('invalid'); function verify() { assert.equal(res.events.length, 1); var event = JSON.parse(res.events[0].substring(5)); assert.equal(event.action, 'building'); + assert.equal(event.name, compiler.name); done(); } });