diff --git a/.eslintrc b/.eslintrc
index e1337ccf95..096f7c8ab0 100644
--- a/.eslintrc
+++ b/.eslintrc
@@ -2,7 +2,11 @@
"extends": ["webpack", "prettier"],
"globals": {
"document": true,
- "window": true
+ "window": true,
+ "self": true,
+ "WorkerGlobalScope": true,
+ "__resourceQuery": true,
+ "__webpack_dev_server_client__": true
},
"parserOptions": {
"sourceType": "script"
diff --git a/client-src/.eslintrc b/client-src/.eslintrc
new file mode 100644
index 0000000000..bd14a19ef2
--- /dev/null
+++ b/client-src/.eslintrc
@@ -0,0 +1,5 @@
+{
+ "parserOptions": {
+ "sourceType": "module"
+ }
+}
diff --git a/client-src/default/index.js b/client-src/default/index.js
index dede6f0763..df7432b5ea 100644
--- a/client-src/default/index.js
+++ b/client-src/default/index.js
@@ -1,14 +1,14 @@
-'use strict';
-
-/* global __resourceQuery WorkerGlobalScope self */
/* eslint prefer-destructuring: off */
-const stripAnsi = require('strip-ansi');
-const socket = require('./socket');
-const overlay = require('./overlay');
-const { log, setLogLevel } = require('./utils/log');
-const sendMessage = require('./utils/sendMessage');
-const reloadApp = require('./utils/reloadApp');
-const createSocketUrl = require('./utils/createSocketUrl');
+import stripAnsi from 'strip-ansi';
+import socket from './socket';
+import {
+ clear as clearOverlay,
+ showMessage as showMessageOverlay,
+} from './overlay';
+import { log, setLogLevel } from './utils/log';
+import sendMessage from './utils/sendMessage';
+import reloadApp from './utils/reloadApp';
+import createSocketUrl from './utils/createSocketUrl';
const status = {
isUnloading: false,
@@ -47,7 +47,7 @@ const onSocketMessage = {
log.info('[WDS] App updated. Recompiling...');
// fixes #1042. overlay doesn't clear if errors are fixed but warnings remain.
if (options.useWarningOverlay || options.useErrorOverlay) {
- overlay.clear();
+ clearOverlay();
}
sendMessage('Invalid');
},
@@ -57,7 +57,7 @@ const onSocketMessage = {
'still-ok': function stillOk() {
log.info('[WDS] Nothing changed.');
if (options.useWarningOverlay || options.useErrorOverlay) {
- overlay.clear();
+ clearOverlay();
}
sendMessage('StillOk');
},
@@ -93,7 +93,7 @@ const onSocketMessage = {
ok() {
sendMessage('Ok');
if (options.useWarningOverlay || options.useErrorOverlay) {
- overlay.clear();
+ clearOverlay();
}
if (options.initial) {
return (options.initial = false);
@@ -112,7 +112,7 @@ const onSocketMessage = {
log.warn(strippedWarnings[i]);
}
if (options.useWarningOverlay) {
- overlay.showMessage(warnings);
+ showMessageOverlay(warnings);
}
if (options.initial) {
@@ -128,7 +128,7 @@ const onSocketMessage = {
log.error(strippedErrors[i]);
}
if (options.useErrorOverlay) {
- overlay.showMessage(errors);
+ showMessageOverlay(errors);
}
options.initial = false;
},
diff --git a/client-src/default/overlay.js b/client-src/default/overlay.js
index a1bb6cef2b..9a200bd6d3 100644
--- a/client-src/default/overlay.js
+++ b/client-src/default/overlay.js
@@ -1,10 +1,10 @@
-'use strict';
-
// The error overlay is inspired (and mostly copied) from Create React App (https://github.com/facebookincubator/create-react-app)
// They, in turn, got inspired by webpack-hot-middleware (https://github.com/glenjamin/webpack-hot-middleware).
-const ansiHTML = require('ansi-html');
-const { AllHtmlEntities } = require('html-entities');
+import ansiHTML from 'ansi-html';
+import { AllHtmlEntities as Entities } from 'html-entities';
+
+const entities = new Entities();
const entities = new AllHtmlEntities();
const colors = {
@@ -109,19 +109,12 @@ function clear() {
lastOnOverlayDivReady = null;
}
-// Compilation with errors (e.g. syntax error or missing modules).
-function showMessage(messages) {
- ensureOverlayDivExists((div) => {
- // Make it look similar to our terminal.
- div.innerHTML = `Failed to compile.
${ansiHTML(
- entities.encode(messages[0])
- )}`;
- });
+// Successful compilation.
+export function clear() {
+ destroyErrorOverlay();
}
-module.exports = {
- clear,
- showMessage,
-};
+// Compilation with errors (e.g. syntax error or missing modules).
+export function showMessage(messages) {
+ showMessageOverlay(messages[0]);
+}
diff --git a/client-src/default/socket.js b/client-src/default/socket.js
index 4c8bcbba20..a5ff0b4f7a 100644
--- a/client-src/default/socket.js
+++ b/client-src/default/socket.js
@@ -1,6 +1,3 @@
-'use strict';
-
-/* global __webpack_dev_server_client__ */
/* eslint-disable
camelcase
*/
@@ -46,4 +43,4 @@ const socket = function initSocket(url, handlers) {
});
};
-module.exports = socket;
+export default socket;
diff --git a/client-src/default/utils/createSocketUrl.js b/client-src/default/utils/createSocketUrl.js
index 98d0f13914..fb78fee60b 100644
--- a/client-src/default/utils/createSocketUrl.js
+++ b/client-src/default/utils/createSocketUrl.js
@@ -1,10 +1,6 @@
-'use strict';
-
-/* global self */
-
-const url = require('url');
-const querystring = require('querystring');
-const getCurrentScriptSource = require('./getCurrentScriptSource');
+import url from 'url';
+import querystring from 'querystring';
+import getCurrentScriptSource from './getCurrentScriptSource';
function createSocketUrl(resourceQuery) {
let urlParts;
@@ -80,4 +76,4 @@ function createSocketUrl(resourceQuery) {
});
}
-module.exports = createSocketUrl;
+export default createSocketUrl;
diff --git a/client-src/default/utils/getCurrentScriptSource.js b/client-src/default/utils/getCurrentScriptSource.js
index 7d1d609a6a..8a4244a2ee 100644
--- a/client-src/default/utils/getCurrentScriptSource.js
+++ b/client-src/default/utils/getCurrentScriptSource.js
@@ -1,5 +1,3 @@
-'use strict';
-
function getCurrentScriptSource() {
// `document.currentScript` is the most accurate way to find the current script,
// but is not supported in all browsers.
@@ -17,4 +15,4 @@ function getCurrentScriptSource() {
throw new Error('[WDS] Failed to get current script source.');
}
-module.exports = getCurrentScriptSource;
+export default getCurrentScriptSource;
diff --git a/client-src/default/utils/log.js b/client-src/default/utils/log.js
index 91d9aa763b..6ae76e069b 100644
--- a/client-src/default/utils/log.js
+++ b/client-src/default/utils/log.js
@@ -1,6 +1,6 @@
-'use strict';
+import { getLogger } from 'loglevel';
-const log = require('loglevel').getLogger('webpack-dev-server');
+export const log = getLogger('webpack-dev-server');
const INFO = 'info';
const WARN = 'warn';
@@ -17,7 +17,7 @@ const NONE = 'none';
// Set the default log level
log.setDefaultLevel(INFO);
-function setLogLevel(level) {
+export function setLogLevel(level) {
switch (level) {
case INFO:
case WARN:
@@ -40,8 +40,3 @@ function setLogLevel(level) {
log.error(`[WDS] Unknown clientLogLevel '${level}'`);
}
}
-
-module.exports = {
- log,
- setLogLevel,
-};
diff --git a/client-src/default/utils/reloadApp.js b/client-src/default/utils/reloadApp.js
index 7237ef6b25..d402f2e1f2 100644
--- a/client-src/default/utils/reloadApp.js
+++ b/client-src/default/utils/reloadApp.js
@@ -1,8 +1,4 @@
-'use strict';
-
-/* global WorkerGlobalScope self */
-
-const { log } = require('./log');
+import { log } from './log';
function reloadApp(
{ hotReload, hot, liveReload },
@@ -46,4 +42,4 @@ function reloadApp(
}
}
-module.exports = reloadApp;
+export default reloadApp;
diff --git a/client-src/default/utils/sendMessage.js b/client-src/default/utils/sendMessage.js
index f4dc2555dc..6cf28a5dd1 100644
--- a/client-src/default/utils/sendMessage.js
+++ b/client-src/default/utils/sendMessage.js
@@ -1,9 +1,5 @@
-'use strict';
-
-/* global __resourceQuery WorkerGlobalScope self */
-
// Send messages to the outside, so plugins can consume it.
-function sendMsg(type, data) {
+function sendMessage(type, data) {
if (
typeof self !== 'undefined' &&
(typeof WorkerGlobalScope === 'undefined' ||
@@ -19,4 +15,4 @@ function sendMsg(type, data) {
}
}
-module.exports = sendMsg;
+export default sendMessage;
diff --git a/client-src/default/webpack.config.js b/client-src/default/webpack.config.js
index a0b70901ca..a10fbb061b 100644
--- a/client-src/default/webpack.config.js
+++ b/client-src/default/webpack.config.js
@@ -1,5 +1,3 @@
-'use strict';
-
module.exports = {
mode: 'production',
module: {
diff --git a/client-src/live/index.js b/client-src/live/index.js
index dd5feef14b..77fc300311 100644
--- a/client-src/live/index.js
+++ b/client-src/live/index.js
@@ -1,11 +1,9 @@
-'use strict';
-
/* eslint import/no-extraneous-dependencies: off, global-require: off */
-const $ = require('jquery');
-const stripAnsi = require('strip-ansi');
-const socket = require('../default/socket');
-require('./style.css');
+import $ from 'jquery';
+import stripAnsi from 'strip-ansi';
+import socket from '../default/socket';
+import './style.css';
let hot = false;
let currentHash = '';
diff --git a/client-src/live/webpack.config.js b/client-src/live/webpack.config.js
index 75e693210a..9217c60db5 100644
--- a/client-src/live/webpack.config.js
+++ b/client-src/live/webpack.config.js
@@ -1,5 +1,3 @@
-'use strict';
-
const path = require('path');
const CopyPlugin = require('copy-webpack-plugin');
diff --git a/client-src/sockjs/index.js b/client-src/sockjs/index.js
index a7db01b9d3..988f4885e3 100644
--- a/client-src/sockjs/index.js
+++ b/client-src/sockjs/index.js
@@ -1,3 +1,3 @@
-'use strict';
+import client from 'sockjs-client';
-module.exports = require('sockjs-client');
+export default client;
diff --git a/client-src/sockjs/webpack.config.js b/client-src/sockjs/webpack.config.js
index 4847a2b910..61c7f655bc 100644
--- a/client-src/sockjs/webpack.config.js
+++ b/client-src/sockjs/webpack.config.js
@@ -1,5 +1,3 @@
-'use strict';
-
module.exports = {
mode: 'production',
output: {
diff --git a/test/client/utils/createSocketUrl.test.js b/test/client/utils/createSocketUrl.test.js
index 892e8204eb..172ec6007f 100644
--- a/test/client/utils/createSocketUrl.test.js
+++ b/test/client/utils/createSocketUrl.test.js
@@ -21,8 +21,10 @@ describe('createSocketUrl', () => {
() => () => url
);
- // eslint-disable-next-line global-require
- const createSocketUrl = require('../../../client-src/default/utils/createSocketUrl');
+ const {
+ default: createSocketUrl,
+ // eslint-disable-next-line global-require
+ } = require('../../../../client-src/default/utils/createSocketUrl');
test(`should return the url when __resourceQuery is ${url}`, () => {
expect(createSocketUrl(url)).toMatchSnapshot();
diff --git a/test/client/utils/getCurrentScriptSource.test.js b/test/client/utils/getCurrentScriptSource.test.js
index 8fb953b1f3..e7ec05aceb 100644
--- a/test/client/utils/getCurrentScriptSource.test.js
+++ b/test/client/utils/getCurrentScriptSource.test.js
@@ -1,6 +1,8 @@
'use strict';
-const getCurrentScriptSource = require('../../../client-src/default/utils/getCurrentScriptSource');
+const {
+ default: getCurrentScriptSource,
+} = require('../../../../client-src/default/utils/getCurrentScriptSource');
describe('getCurrentScriptSource', () => {
afterEach(() => {
diff --git a/test/client/utils/reloadApp.test.js b/test/client/utils/reloadApp.test.js
index 13a392b117..be679dace4 100644
--- a/test/client/utils/reloadApp.test.js
+++ b/test/client/utils/reloadApp.test.js
@@ -25,7 +25,8 @@ describe('reloadApp', () => {
});
// eslint-disable-next-line global-require
- reloadApp = require('../../../client-src/default/utils/reloadApp');
+ reloadApp = require('../../../../client-src/default/utils/reloadApp')
+ .default;
});
afterEach(() => {
diff --git a/test/client/utils/sendMessage.test.js b/test/client/utils/sendMessage.test.js
index a60f2548bc..fd8ecbd315 100644
--- a/test/client/utils/sendMessage.test.js
+++ b/test/client/utils/sendMessage.test.js
@@ -2,7 +2,9 @@
/* global self */
-const sendMessage = require('../../../client-src/default/utils/sendMessage');
+const {
+ default: sendMessage,
+} = require('../../../../client-src/default/utils/sendMessage');
describe('sendMessage', () => {
afterEach(() => {