diff --git a/client-src/index.js b/client-src/index.js
index eb2ff4bc1d..3cbacd742b 100644
--- a/client-src/index.js
+++ b/client-src/index.js
@@ -4,7 +4,7 @@ import webpackHotLog from "webpack/hot/log.js";
import stripAnsi from "./modules/strip-ansi/index.js";
import parseURL from "./utils/parseURL.js";
import socket from "./socket.js";
-import { show, hide } from "./overlay.js";
+import { formatProblem, show, hide } from "./overlay.js";
import { log, setLogLevel } from "./utils/log.js";
import sendMessage from "./utils/sendMessage.js";
import reloadApp from "./utils/reloadApp.js";
@@ -152,14 +152,16 @@ const onSocketMessage = {
warnings(warnings) {
log.warn("Warnings while compiling.");
- const strippedWarnings = warnings.map((warning) =>
- stripAnsi(warning.message ? warning.message : warning)
- );
+ const printableWarnings = warnings.map((error) => {
+ const { header, body } = formatProblem("warning", error);
+
+ return `${header}\n${stripAnsi(body)}`;
+ });
- sendMessage("Warnings", strippedWarnings);
+ sendMessage("Warnings", printableWarnings);
- for (let i = 0; i < strippedWarnings.length; i++) {
- log.warn(strippedWarnings[i]);
+ for (let i = 0; i < printableWarnings.length; i++) {
+ log.warn(printableWarnings[i]);
}
const needShowOverlayForWarnings =
@@ -168,7 +170,7 @@ const onSocketMessage = {
: options.overlay && options.overlay.warnings;
if (needShowOverlayForWarnings) {
- show(warnings, "warnings");
+ show("warning", warnings);
}
reloadApp(options, status);
@@ -176,14 +178,16 @@ const onSocketMessage = {
errors(errors) {
log.error("Errors while compiling. Reload prevented.");
- const strippedErrors = errors.map((error) =>
- stripAnsi(error.message ? error.message : error)
- );
+ const printableErrors = errors.map((error) => {
+ const { header, body } = formatProblem("error", error);
+
+ return `${header}\n${stripAnsi(body)}`;
+ });
- sendMessage("Errors", strippedErrors);
+ sendMessage("Errors", printableErrors);
- for (let i = 0; i < strippedErrors.length; i++) {
- log.error(strippedErrors[i]);
+ for (let i = 0; i < printableErrors.length; i++) {
+ log.error(printableErrors[i]);
}
const needShowOverlayForErrors =
@@ -192,7 +196,7 @@ const onSocketMessage = {
: options.overlay && options.overlay.errors;
if (needShowOverlayForErrors) {
- show(errors, "errors");
+ show("error", errors);
}
},
error(error) {
diff --git a/client-src/overlay.js b/client-src/overlay.js
index 609fb0a314..819597ed15 100644
--- a/client-src/overlay.js
+++ b/client-src/overlay.js
@@ -124,20 +124,48 @@ function hide() {
containerElement = null;
}
+function formatProblem(type, item) {
+ let header = type === "warning" ? "WARNING" : "ERROR";
+ let body = "";
+
+ if (typeof item === "string") {
+ body += item;
+ } else {
+ const file = item.file || "";
+ // eslint-disable-next-line no-nested-ternary
+ const moduleName = item.moduleName
+ ? item.moduleName.indexOf("!") !== -1
+ ? `${item.moduleName.replace(/^(\s|\S)*!/, "")} (${item.moduleName})`
+ : `${item.moduleName}`
+ : "";
+ const loc = item.loc;
+
+ header += `${
+ moduleName || file
+ ? ` in ${
+ moduleName ? `${moduleName}${file ? ` (${file})` : ""}` : file
+ }${loc ? ` ${loc}` : ""}`
+ : ""
+ }`;
+ body += item.message || "";
+ }
+
+ return { header, body };
+}
+
// Compilation with errors (e.g. syntax error or missing modules).
-function show(messages, type) {
+function show(type, messages) {
ensureOverlayExists(() => {
messages.forEach((message) => {
const entryElement = document.createElement("div");
const typeElement = document.createElement("span");
- // ts-loader will output `error.file` for error file path, not in message
- typeElement.innerText =
- (type === "warnings" ? "Warning:" : "Error:") + (message.file || "");
+ const { header, body } = formatProblem(type, message);
+
+ typeElement.innerText = header;
typeElement.style.color = `#${colors.red}`;
// Make it look similar to our terminal.
- const errorMessage = message.message || messages[0];
- const text = ansiHTML(encode(errorMessage));
+ const text = ansiHTML(encode(body));
const messageTextNode = document.createElement("div");
messageTextNode.innerHTML = text;
@@ -154,4 +182,4 @@ function show(messages, type) {
});
}
-export { show, hide };
+export { formatProblem, show, hide };
diff --git a/test/client/__snapshots__/index.test.js.snap.webpack4 b/test/client/__snapshots__/index.test.js.snap.webpack4
index 6705d56be4..49d113ed5d 100644
--- a/test/client/__snapshots__/index.test.js.snap.webpack4
+++ b/test/client/__snapshots__/index.test.js.snap.webpack4
@@ -45,13 +45,16 @@ exports[`index should run onSocketMessage.warnings 2`] = `"Warnings"`;
exports[`index should run onSocketMessage.warnings 3`] = `
Array [
Array [
- "warn1",
+ "HEADER warning
+BODY: warning",
],
Array [
- "warn2",
+ "HEADER warning
+BODY: warning",
],
Array [
- "warn3",
+ "HEADER warning
+BODY: warning",
],
]
`;
diff --git a/test/client/__snapshots__/index.test.js.snap.webpack5 b/test/client/__snapshots__/index.test.js.snap.webpack5
index 6705d56be4..49d113ed5d 100644
--- a/test/client/__snapshots__/index.test.js.snap.webpack5
+++ b/test/client/__snapshots__/index.test.js.snap.webpack5
@@ -45,13 +45,16 @@ exports[`index should run onSocketMessage.warnings 2`] = `"Warnings"`;
exports[`index should run onSocketMessage.warnings 3`] = `
Array [
Array [
- "warn1",
+ "HEADER warning
+BODY: warning",
],
Array [
- "warn2",
+ "HEADER warning
+BODY: warning",
],
Array [
- "warn3",
+ "HEADER warning
+BODY: warning",
],
]
`;
diff --git a/test/client/index.test.js b/test/client/index.test.js
index 30e3cb54cb..34fafa793b 100644
--- a/test/client/index.test.js
+++ b/test/client/index.test.js
@@ -39,6 +39,9 @@ describe("index", () => {
jest.setMock("../../client-src/overlay.js", {
hide: jest.fn(),
show: jest.fn(),
+ formatProblem: (item) => {
+ return { header: "HEADER warning", body: `BODY: ${item}` };
+ },
});
overlay = require("../../client-src/overlay");
diff --git a/test/e2e/__snapshots__/logging.test.js.snap.webpack4 b/test/e2e/__snapshots__/logging.test.js.snap.webpack4
index 592e6a4b43..5c4d09fab8 100644
--- a/test/e2e/__snapshots__/logging.test.js.snap.webpack4
+++ b/test/e2e/__snapshots__/logging.test.js.snap.webpack4
@@ -19,7 +19,8 @@ Array [
"[webpack-dev-server] Hot Module Replacement enabled.",
"[webpack-dev-server] Live Reloading enabled.",
"[webpack-dev-server] Errors while compiling. Reload prevented.",
- "[webpack-dev-server] Error from compilation",
+ "[webpack-dev-server] ERROR
+Error from compilation",
]
`;
@@ -30,7 +31,8 @@ Array [
"[webpack-dev-server] Hot Module Replacement enabled.",
"[webpack-dev-server] Live Reloading enabled.",
"[webpack-dev-server] Errors while compiling. Reload prevented.",
- "[webpack-dev-server] Error from compilation",
+ "[webpack-dev-server] ERROR
+Error from compilation",
]
`;
@@ -122,7 +124,8 @@ exports[`logging should work and log only error (sockjs) 1`] = `
Array [
"Hey.",
"[webpack-dev-server] Errors while compiling. Reload prevented.",
- "[webpack-dev-server] Error from compilation",
+ "[webpack-dev-server] ERROR
+Error from compilation",
]
`;
@@ -130,7 +133,8 @@ exports[`logging should work and log only error (ws) 1`] = `
Array [
"Hey.",
"[webpack-dev-server] Errors while compiling. Reload prevented.",
- "[webpack-dev-server] Error from compilation",
+ "[webpack-dev-server] ERROR
+Error from compilation",
]
`;
@@ -166,9 +170,11 @@ exports[`logging should work and log warning and errors (sockjs) 1`] = `
Array [
"Hey.",
"[webpack-dev-server] Warnings while compiling.",
- "[webpack-dev-server] Warning from compilation",
+ "[webpack-dev-server] WARNING
+Warning from compilation",
"[webpack-dev-server] Errors while compiling. Reload prevented.",
- "[webpack-dev-server] Error from compilation",
+ "[webpack-dev-server] ERROR
+Error from compilation",
]
`;
@@ -176,9 +182,11 @@ exports[`logging should work and log warning and errors (ws) 1`] = `
Array [
"Hey.",
"[webpack-dev-server] Warnings while compiling.",
- "[webpack-dev-server] Warning from compilation",
+ "[webpack-dev-server] WARNING
+Warning from compilation",
"[webpack-dev-server] Errors while compiling. Reload prevented.",
- "[webpack-dev-server] Error from compilation",
+ "[webpack-dev-server] ERROR
+Error from compilation",
]
`;
@@ -189,7 +197,8 @@ Array [
"[webpack-dev-server] Hot Module Replacement enabled.",
"[webpack-dev-server] Live Reloading enabled.",
"[webpack-dev-server] Warnings while compiling.",
- "[webpack-dev-server] Warning from compilation",
+ "[webpack-dev-server] WARNING
+Warning from compilation",
]
`;
@@ -200,7 +209,8 @@ Array [
"[webpack-dev-server] Hot Module Replacement enabled.",
"[webpack-dev-server] Live Reloading enabled.",
"[webpack-dev-server] Warnings while compiling.",
- "[webpack-dev-server] Warning from compilation",
+ "[webpack-dev-server] WARNING
+Warning from compilation",
]
`;
diff --git a/test/e2e/__snapshots__/logging.test.js.snap.webpack5 b/test/e2e/__snapshots__/logging.test.js.snap.webpack5
index 592e6a4b43..5c4d09fab8 100644
--- a/test/e2e/__snapshots__/logging.test.js.snap.webpack5
+++ b/test/e2e/__snapshots__/logging.test.js.snap.webpack5
@@ -19,7 +19,8 @@ Array [
"[webpack-dev-server] Hot Module Replacement enabled.",
"[webpack-dev-server] Live Reloading enabled.",
"[webpack-dev-server] Errors while compiling. Reload prevented.",
- "[webpack-dev-server] Error from compilation",
+ "[webpack-dev-server] ERROR
+Error from compilation",
]
`;
@@ -30,7 +31,8 @@ Array [
"[webpack-dev-server] Hot Module Replacement enabled.",
"[webpack-dev-server] Live Reloading enabled.",
"[webpack-dev-server] Errors while compiling. Reload prevented.",
- "[webpack-dev-server] Error from compilation",
+ "[webpack-dev-server] ERROR
+Error from compilation",
]
`;
@@ -122,7 +124,8 @@ exports[`logging should work and log only error (sockjs) 1`] = `
Array [
"Hey.",
"[webpack-dev-server] Errors while compiling. Reload prevented.",
- "[webpack-dev-server] Error from compilation",
+ "[webpack-dev-server] ERROR
+Error from compilation",
]
`;
@@ -130,7 +133,8 @@ exports[`logging should work and log only error (ws) 1`] = `
Array [
"Hey.",
"[webpack-dev-server] Errors while compiling. Reload prevented.",
- "[webpack-dev-server] Error from compilation",
+ "[webpack-dev-server] ERROR
+Error from compilation",
]
`;
@@ -166,9 +170,11 @@ exports[`logging should work and log warning and errors (sockjs) 1`] = `
Array [
"Hey.",
"[webpack-dev-server] Warnings while compiling.",
- "[webpack-dev-server] Warning from compilation",
+ "[webpack-dev-server] WARNING
+Warning from compilation",
"[webpack-dev-server] Errors while compiling. Reload prevented.",
- "[webpack-dev-server] Error from compilation",
+ "[webpack-dev-server] ERROR
+Error from compilation",
]
`;
@@ -176,9 +182,11 @@ exports[`logging should work and log warning and errors (ws) 1`] = `
Array [
"Hey.",
"[webpack-dev-server] Warnings while compiling.",
- "[webpack-dev-server] Warning from compilation",
+ "[webpack-dev-server] WARNING
+Warning from compilation",
"[webpack-dev-server] Errors while compiling. Reload prevented.",
- "[webpack-dev-server] Error from compilation",
+ "[webpack-dev-server] ERROR
+Error from compilation",
]
`;
@@ -189,7 +197,8 @@ Array [
"[webpack-dev-server] Hot Module Replacement enabled.",
"[webpack-dev-server] Live Reloading enabled.",
"[webpack-dev-server] Warnings while compiling.",
- "[webpack-dev-server] Warning from compilation",
+ "[webpack-dev-server] WARNING
+Warning from compilation",
]
`;
@@ -200,7 +209,8 @@ Array [
"[webpack-dev-server] Hot Module Replacement enabled.",
"[webpack-dev-server] Live Reloading enabled.",
"[webpack-dev-server] Warnings while compiling.",
- "[webpack-dev-server] Warning from compilation",
+ "[webpack-dev-server] WARNING
+Warning from compilation",
]
`;
diff --git a/test/e2e/__snapshots__/overlay.test.js.snap.webpack4 b/test/e2e/__snapshots__/overlay.test.js.snap.webpack4
index d8a4d50c72..3c1eaab350 100644
--- a/test/e2e/__snapshots__/overlay.test.js.snap.webpack4
+++ b/test/e2e/__snapshots__/overlay.test.js.snap.webpack4
@@ -63,7 +63,7 @@ exports[`overlay should not show initially, then show on an error and allow to c
X