diff --git a/lib/Server.js b/lib/Server.js index 5c03d45ae1..efe8c51a80 100644 --- a/lib/Server.js +++ b/lib/Server.js @@ -118,7 +118,7 @@ class Server { this.setupDevMiddleware(); // set express routes - routes(this.app, this.middleware, this.options); + routes(this); // Keep track of websocket proxies for external websocket upgrade. this.websocketProxies = []; diff --git a/lib/utils/routes.js b/lib/utils/routes.js index c306abbfb8..21460068a9 100644 --- a/lib/utils/routes.js +++ b/lib/utils/routes.js @@ -5,7 +5,11 @@ const { join } = require('path'); const clientBasePath = join(__dirname, '..', '..', 'client'); -function routes(app, middleware, options) { +function routes(server) { + const app = server.app; + const middleware = server.middleware; + const options = server.options; + app.get('/__webpack_dev_server__/live.bundle.js', (req, res) => { res.setHeader('Content-Type', 'application/javascript'); @@ -30,6 +34,11 @@ function routes(app, middleware, options) { createReadStream(join(clientBasePath, 'live.html')).pipe(res); }); + app.get('/invalidate', (_req, res) => { + server.invalidate(); + res.end(); + }); + app.get('/webpack-dev-server', (req, res) => { res.setHeader('Content-Type', 'text/html'); diff --git a/test/server/utils/routes.test.js b/test/server/utils/routes.test.js index acc94eb8eb..afe5dd40a2 100644 --- a/test/server/utils/routes.test.js +++ b/test/server/utils/routes.test.js @@ -64,6 +64,10 @@ describe('routes util', () => { }); }); + it('GET request to invalidate endpoint', (done) => { + req.get('/invalidate').expect(200, done); + }); + it('should handles GET request to live html', (done) => { req.get('/webpack-dev-server/').then(({ res }) => { expect(res.headers['content-type']).toEqual('text/html');