From c22dad0b4edbb59fb0d2e9c8039e14b4cae97622 Mon Sep 17 00:00:00 2001 From: Kirill Nagaitsev Date: Tue, 25 Jun 2019 15:42:48 -0500 Subject: [PATCH 1/5] fix(client): stricter reg exp to redirect sockjs client path --- client-src/default/webpack.config.js | 15 ++-- client-src/live/webpack.config.js | 15 ++-- test/e2e/Iframe.test.js | 83 ++++++++++++++++++++++ test/e2e/__snapshots__/Iframe.test.js.snap | 35 +++++++++ test/ports-map.js | 1 + 5 files changed, 137 insertions(+), 12 deletions(-) create mode 100644 test/e2e/Iframe.test.js create mode 100644 test/e2e/__snapshots__/Iframe.test.js.snap diff --git a/client-src/default/webpack.config.js b/client-src/default/webpack.config.js index ac001f26d7..109ea8f0bc 100644 --- a/client-src/default/webpack.config.js +++ b/client-src/default/webpack.config.js @@ -18,11 +18,14 @@ module.exports = { ], }, plugins: [ - new webpack.NormalModuleReplacementPlugin(/\/clients\//, (resource) => { - resource.request = resource.request.replace( - /\/clients\//, - '/../clients/' - ); - }), + new webpack.NormalModuleReplacementPlugin( + /^\.\/clients\/SockJSClient$/, + (resource) => { + resource.request = resource.request.replace( + /^\.\/clients\/SockJSClient$/, + '../clients/SockJSClient' + ); + } + ), ], }; diff --git a/client-src/live/webpack.config.js b/client-src/live/webpack.config.js index 3887b38b2b..8a88b2d679 100644 --- a/client-src/live/webpack.config.js +++ b/client-src/live/webpack.config.js @@ -34,11 +34,14 @@ module.exports = { to: path.resolve(__dirname, '../../client/live.html'), }, ]), - new webpack.NormalModuleReplacementPlugin(/\/clients\//, (resource) => { - resource.request = resource.request.replace( - /\/clients\//, - '/../clients/' - ); - }), + new webpack.NormalModuleReplacementPlugin( + /^\.\/clients\/SockJSClient$/, + (resource) => { + resource.request = resource.request.replace( + /^\.\/clients\/SockJSClient$/, + '../clients/SockJSClient' + ); + } + ), ], }; diff --git a/test/e2e/Iframe.test.js b/test/e2e/Iframe.test.js new file mode 100644 index 0000000000..091ae707e9 --- /dev/null +++ b/test/e2e/Iframe.test.js @@ -0,0 +1,83 @@ +'use strict'; + +const testServer = require('../helpers/test-server'); +const config = require('../fixtures/client-config/webpack.config'); +const runBrowser = require('../helpers/run-browser'); +const port = require('../ports-map').Iframe; + +// iframe mode should be tested while still supported, because +// its sources differ from those of inline mode, which can cause unexpected +// breaking changes: https://github.com/webpack/webpack-dev-server/issues/2006 +describe('Client iframe console.log', () => { + const baseOptions = { + port, + host: '0.0.0.0', + }; + const cases = [ + { + title: 'hot disabled', + options: { + hot: false, + }, + }, + { + title: 'hot enabled', + options: { + hot: true, + }, + }, + { + title: 'liveReload disabled', + options: { + liveReload: false, + }, + }, + { + title: 'liveReload enabled', + options: { + liveReload: true, + }, + }, + { + title: 'clientLogLevel is silent', + options: { + clientLogLevel: 'silent', + }, + }, + ]; + + for (const { title, options } of cases) { + it(title, () => { + const res = []; + const testOptions = Object.assign({}, baseOptions, options); + + // TODO: use async/await when Node.js v6 support is dropped + return Promise.resolve() + .then(() => { + return new Promise((resolve) => { + testServer.startAwaitingCompilation(config, testOptions, resolve); + }); + }) + .then(runBrowser) + .then(({ page, browser }) => { + return new Promise((resolve) => { + page.goto(`http://localhost:${port}/webpack-dev-server/main`); + page.on('console', ({ _text }) => { + res.push(_text); + }); + setTimeout(() => { + browser.close().then(() => { + expect(res).toMatchSnapshot(); + resolve(); + }); + }, 3000); + }); + }) + .then(() => { + return new Promise((resolve) => { + testServer.close(resolve); + }); + }); + }); + } +}); diff --git a/test/e2e/__snapshots__/Iframe.test.js.snap b/test/e2e/__snapshots__/Iframe.test.js.snap new file mode 100644 index 0000000000..c34ef4b018 --- /dev/null +++ b/test/e2e/__snapshots__/Iframe.test.js.snap @@ -0,0 +1,35 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`Client iframe console.log clientLogLevel is silent 1`] = ` +Array [ + "Hey.", +] +`; + +exports[`Client iframe console.log hot disabled 1`] = ` +Array [ + "Hey.", + "[WDS] Live Reloading enabled.", +] +`; + +exports[`Client iframe console.log hot enabled 1`] = ` +Array [ + "[HMR] Waiting for update signal from WDS...", + "Hey.", + "[WDS] Hot Module Replacement enabled.", + "[WDS] Live Reloading enabled.", +] +`; + +exports[`Client iframe console.log liveReload disabled 1`] = ` +Array [ + "Hey.", +] +`; + +exports[`Client iframe console.log liveReload enabled 1`] = ` +Array [ + "Hey.", +] +`; diff --git a/test/ports-map.js b/test/ports-map.js index 551a9f514f..788cb1047e 100644 --- a/test/ports-map.js +++ b/test/ports-map.js @@ -43,6 +43,7 @@ const portsList = { Progress: 1, 'progress-option': 1, 'profile-option': 1, + Iframe: 1, }; let startPort = 8079; From 9d448310919bc92a042329c731699b4c5be5be11 Mon Sep 17 00:00:00 2001 From: Kirill Nagaitsev Date: Wed, 26 Jun 2019 10:10:48 -0500 Subject: [PATCH 2/5] fix(client): check resource context for normal module replacement --- client-src/default/webpack.config.js | 13 +++++++++---- client-src/live/webpack.config.js | 13 +++++++++---- 2 files changed, 18 insertions(+), 8 deletions(-) diff --git a/client-src/default/webpack.config.js b/client-src/default/webpack.config.js index 109ea8f0bc..d9afedb782 100644 --- a/client-src/default/webpack.config.js +++ b/client-src/default/webpack.config.js @@ -21,10 +21,15 @@ module.exports = { new webpack.NormalModuleReplacementPlugin( /^\.\/clients\/SockJSClient$/, (resource) => { - resource.request = resource.request.replace( - /^\.\/clients\/SockJSClient$/, - '../clients/SockJSClient' - ); + if ( + resource.context.includes('/webpack-dev-server/client-src/') || + resource.context.includes('\\webpack-dev-server\\client-src\\') + ) { + resource.request = resource.request.replace( + /^\.\/clients\/SockJSClient$/, + '../clients/SockJSClient' + ); + } } ), ], diff --git a/client-src/live/webpack.config.js b/client-src/live/webpack.config.js index 8a88b2d679..bad01ec635 100644 --- a/client-src/live/webpack.config.js +++ b/client-src/live/webpack.config.js @@ -37,10 +37,15 @@ module.exports = { new webpack.NormalModuleReplacementPlugin( /^\.\/clients\/SockJSClient$/, (resource) => { - resource.request = resource.request.replace( - /^\.\/clients\/SockJSClient$/, - '../clients/SockJSClient' - ); + if ( + resource.context.includes('/webpack-dev-server/client-src/') || + resource.context.includes('\\webpack-dev-server\\client-src\\') + ) { + resource.request = resource.request.replace( + /^\.\/clients\/SockJSClient$/, + '../clients/SockJSClient' + ); + } } ), ], From 4c6854335f756bc17f4b36837f8d3d8909a055db Mon Sep 17 00:00:00 2001 From: Kirill Nagaitsev Date: Wed, 26 Jun 2019 10:22:11 -0500 Subject: [PATCH 3/5] fix(client): remove dev server string from context path --- client-src/default/webpack.config.js | 6 ++++-- client-src/live/webpack.config.js | 4 ++-- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/client-src/default/webpack.config.js b/client-src/default/webpack.config.js index d9afedb782..fe768d3e6a 100644 --- a/client-src/default/webpack.config.js +++ b/client-src/default/webpack.config.js @@ -22,13 +22,15 @@ module.exports = { /^\.\/clients\/SockJSClient$/, (resource) => { if ( - resource.context.includes('/webpack-dev-server/client-src/') || - resource.context.includes('\\webpack-dev-server\\client-src\\') + resource.context.includes('/client-src/default') || + resource.context.includes('\\client-src\\default') ) { resource.request = resource.request.replace( /^\.\/clients\/SockJSClient$/, '../clients/SockJSClient' ); + console.log(resource); + console.log(require.resolve('../default')); } } ), diff --git a/client-src/live/webpack.config.js b/client-src/live/webpack.config.js index bad01ec635..e431010e0d 100644 --- a/client-src/live/webpack.config.js +++ b/client-src/live/webpack.config.js @@ -38,8 +38,8 @@ module.exports = { /^\.\/clients\/SockJSClient$/, (resource) => { if ( - resource.context.includes('/webpack-dev-server/client-src/') || - resource.context.includes('\\webpack-dev-server\\client-src\\') + resource.context.includes('/client-src/default') || + resource.context.includes('\\client-src\\default') ) { resource.request = resource.request.replace( /^\.\/clients\/SockJSClient$/, From ecf61e3eb9249a57a53a3d76d8c130a0b9ece451 Mon Sep 17 00:00:00 2001 From: Kirill Nagaitsev Date: Wed, 26 Jun 2019 10:23:24 -0500 Subject: [PATCH 4/5] fix(client): remove console logs --- client-src/default/webpack.config.js | 2 -- 1 file changed, 2 deletions(-) diff --git a/client-src/default/webpack.config.js b/client-src/default/webpack.config.js index fe768d3e6a..8ce3d537dd 100644 --- a/client-src/default/webpack.config.js +++ b/client-src/default/webpack.config.js @@ -29,8 +29,6 @@ module.exports = { /^\.\/clients\/SockJSClient$/, '../clients/SockJSClient' ); - console.log(resource); - console.log(require.resolve('../default')); } } ), From eda4074cdbd4419ee1b9a332643654d01ffce909 Mon Sep 17 00:00:00 2001 From: Kirill Nagaitsev Date: Mon, 8 Jul 2019 22:46:40 -0500 Subject: [PATCH 5/5] fix(client): fixed resource context match to use cwd --- client-src/default/webpack.config.js | 5 +---- client-src/live/webpack.config.js | 5 +---- 2 files changed, 2 insertions(+), 8 deletions(-) diff --git a/client-src/default/webpack.config.js b/client-src/default/webpack.config.js index 8ce3d537dd..3968b43bd9 100644 --- a/client-src/default/webpack.config.js +++ b/client-src/default/webpack.config.js @@ -21,10 +21,7 @@ module.exports = { new webpack.NormalModuleReplacementPlugin( /^\.\/clients\/SockJSClient$/, (resource) => { - if ( - resource.context.includes('/client-src/default') || - resource.context.includes('\\client-src\\default') - ) { + if (resource.context.startsWith(process.cwd())) { resource.request = resource.request.replace( /^\.\/clients\/SockJSClient$/, '../clients/SockJSClient' diff --git a/client-src/live/webpack.config.js b/client-src/live/webpack.config.js index e431010e0d..9bb71611f8 100644 --- a/client-src/live/webpack.config.js +++ b/client-src/live/webpack.config.js @@ -37,10 +37,7 @@ module.exports = { new webpack.NormalModuleReplacementPlugin( /^\.\/clients\/SockJSClient$/, (resource) => { - if ( - resource.context.includes('/client-src/default') || - resource.context.includes('\\client-src\\default') - ) { + if (resource.context.startsWith(process.cwd())) { resource.request = resource.request.replace( /^\.\/clients\/SockJSClient$/, '../clients/SockJSClient'