From 5cf6936b2ff73dbd302091e69953b5bcb14dec6b Mon Sep 17 00:00:00 2001 From: Hana Date: Wed, 11 Sep 2024 18:53:40 +0800 Subject: [PATCH 1/2] fix: init --- .../loader-emit-error/index.js | 10 ++++++++++ .../loader-emit-error/lib.js | 1 + .../loader-emit-error/my-loader.js | 4 ++++ .../loader-emit-error/rspack.config.js | 18 ++++++++++++++++++ .../loader-emit-error/stats.err | 9 +++++++++ .../loader-emit-hide-stack/index.js | 10 ++++++++++ .../loader-emit-hide-stack/lib.js | 1 + .../loader-emit-hide-stack/my-loader.js | 11 +++++++++++ .../loader-emit-hide-stack/rspack.config.js | 18 ++++++++++++++++++ .../loader-emit-hide-stack/stats.err | 5 +++++ .../loader-emit-warning/index.js | 10 ++++++++++ .../loader-emit-warning/lib.js | 1 + .../loader-emit-warning/my-loader.js | 4 ++++ .../loader-emit-warning/rspack.config.js | 18 ++++++++++++++++++ .../loader-emit-warning/stats.err | 9 +++++++++ packages/rspack/src/loader-runner/index.ts | 4 ---- packages/rspack/src/util/index.ts | 12 +++++++++++- 17 files changed, 140 insertions(+), 5 deletions(-) create mode 100644 packages/rspack-test-tools/tests/diagnosticsCases/module-build-failed/loader-emit-error/index.js create mode 100644 packages/rspack-test-tools/tests/diagnosticsCases/module-build-failed/loader-emit-error/lib.js create mode 100644 packages/rspack-test-tools/tests/diagnosticsCases/module-build-failed/loader-emit-error/my-loader.js create mode 100644 packages/rspack-test-tools/tests/diagnosticsCases/module-build-failed/loader-emit-error/rspack.config.js create mode 100644 packages/rspack-test-tools/tests/diagnosticsCases/module-build-failed/loader-emit-error/stats.err create mode 100644 packages/rspack-test-tools/tests/diagnosticsCases/module-build-failed/loader-emit-hide-stack/index.js create mode 100644 packages/rspack-test-tools/tests/diagnosticsCases/module-build-failed/loader-emit-hide-stack/lib.js create mode 100644 packages/rspack-test-tools/tests/diagnosticsCases/module-build-failed/loader-emit-hide-stack/my-loader.js create mode 100644 packages/rspack-test-tools/tests/diagnosticsCases/module-build-failed/loader-emit-hide-stack/rspack.config.js create mode 100644 packages/rspack-test-tools/tests/diagnosticsCases/module-build-failed/loader-emit-hide-stack/stats.err create mode 100644 packages/rspack-test-tools/tests/diagnosticsCases/module-build-failed/loader-emit-warning/index.js create mode 100644 packages/rspack-test-tools/tests/diagnosticsCases/module-build-failed/loader-emit-warning/lib.js create mode 100644 packages/rspack-test-tools/tests/diagnosticsCases/module-build-failed/loader-emit-warning/my-loader.js create mode 100644 packages/rspack-test-tools/tests/diagnosticsCases/module-build-failed/loader-emit-warning/rspack.config.js create mode 100644 packages/rspack-test-tools/tests/diagnosticsCases/module-build-failed/loader-emit-warning/stats.err diff --git a/packages/rspack-test-tools/tests/diagnosticsCases/module-build-failed/loader-emit-error/index.js b/packages/rspack-test-tools/tests/diagnosticsCases/module-build-failed/loader-emit-error/index.js new file mode 100644 index 00000000000..f521e00df8a --- /dev/null +++ b/packages/rspack-test-tools/tests/diagnosticsCases/module-build-failed/loader-emit-error/index.js @@ -0,0 +1,10 @@ +it("should include loader thrown error", () => { + let errored = false; + try { + require("./lib"); + } catch (e) { + errored = true; + expect(e.message).toContain("Failed to load"); + } + expect(errored).toBeTruthy() +}); diff --git a/packages/rspack-test-tools/tests/diagnosticsCases/module-build-failed/loader-emit-error/lib.js b/packages/rspack-test-tools/tests/diagnosticsCases/module-build-failed/loader-emit-error/lib.js new file mode 100644 index 00000000000..ede7bc80d75 --- /dev/null +++ b/packages/rspack-test-tools/tests/diagnosticsCases/module-build-failed/loader-emit-error/lib.js @@ -0,0 +1 @@ +export const lib = "lib"; diff --git a/packages/rspack-test-tools/tests/diagnosticsCases/module-build-failed/loader-emit-error/my-loader.js b/packages/rspack-test-tools/tests/diagnosticsCases/module-build-failed/loader-emit-error/my-loader.js new file mode 100644 index 00000000000..f135ba2212d --- /dev/null +++ b/packages/rspack-test-tools/tests/diagnosticsCases/module-build-failed/loader-emit-error/my-loader.js @@ -0,0 +1,4 @@ +module.exports = function (context) { + this.emitError(new Error("Failed to load")); + return "" +}; diff --git a/packages/rspack-test-tools/tests/diagnosticsCases/module-build-failed/loader-emit-error/rspack.config.js b/packages/rspack-test-tools/tests/diagnosticsCases/module-build-failed/loader-emit-error/rspack.config.js new file mode 100644 index 00000000000..69e7f91cadb --- /dev/null +++ b/packages/rspack-test-tools/tests/diagnosticsCases/module-build-failed/loader-emit-error/rspack.config.js @@ -0,0 +1,18 @@ +/** + * @type {import('@rspack/core').RspackOptions} + */ +module.exports = { + context: __dirname, + module: { + rules: [ + { + test: /lib\.js$/, + use: [ + { + loader: "./my-loader.js" + } + ] + } + ] + } +}; diff --git a/packages/rspack-test-tools/tests/diagnosticsCases/module-build-failed/loader-emit-error/stats.err b/packages/rspack-test-tools/tests/diagnosticsCases/module-build-failed/loader-emit-error/stats.err new file mode 100644 index 00000000000..1ec682d6041 --- /dev/null +++ b/packages/rspack-test-tools/tests/diagnosticsCases/module-build-failed/loader-emit-error/stats.err @@ -0,0 +1,9 @@ +ERROR in ./lib.js + × ModuleError: Failed to load (from: /tests/diagnosticsCases/module-build-failed/loader-emit-error/my-loader.js) + │ at xxx + │ at xxx + │ at xxx + │ at xxx + │ at xxx + │ at xxx + │ at xxx \ No newline at end of file diff --git a/packages/rspack-test-tools/tests/diagnosticsCases/module-build-failed/loader-emit-hide-stack/index.js b/packages/rspack-test-tools/tests/diagnosticsCases/module-build-failed/loader-emit-hide-stack/index.js new file mode 100644 index 00000000000..f521e00df8a --- /dev/null +++ b/packages/rspack-test-tools/tests/diagnosticsCases/module-build-failed/loader-emit-hide-stack/index.js @@ -0,0 +1,10 @@ +it("should include loader thrown error", () => { + let errored = false; + try { + require("./lib"); + } catch (e) { + errored = true; + expect(e.message).toContain("Failed to load"); + } + expect(errored).toBeTruthy() +}); diff --git a/packages/rspack-test-tools/tests/diagnosticsCases/module-build-failed/loader-emit-hide-stack/lib.js b/packages/rspack-test-tools/tests/diagnosticsCases/module-build-failed/loader-emit-hide-stack/lib.js new file mode 100644 index 00000000000..ede7bc80d75 --- /dev/null +++ b/packages/rspack-test-tools/tests/diagnosticsCases/module-build-failed/loader-emit-hide-stack/lib.js @@ -0,0 +1 @@ +export const lib = "lib"; diff --git a/packages/rspack-test-tools/tests/diagnosticsCases/module-build-failed/loader-emit-hide-stack/my-loader.js b/packages/rspack-test-tools/tests/diagnosticsCases/module-build-failed/loader-emit-hide-stack/my-loader.js new file mode 100644 index 00000000000..4ea41d2ac73 --- /dev/null +++ b/packages/rspack-test-tools/tests/diagnosticsCases/module-build-failed/loader-emit-hide-stack/my-loader.js @@ -0,0 +1,11 @@ +module.exports = function (context) { + let e; + e = new Error("Failed to load"); + e.hideStack = true; + this.emitError(e); + + e = new Error("Failed to load"); + e.hideStack = true; + this.emitWarning(e); + return "" +}; diff --git a/packages/rspack-test-tools/tests/diagnosticsCases/module-build-failed/loader-emit-hide-stack/rspack.config.js b/packages/rspack-test-tools/tests/diagnosticsCases/module-build-failed/loader-emit-hide-stack/rspack.config.js new file mode 100644 index 00000000000..69e7f91cadb --- /dev/null +++ b/packages/rspack-test-tools/tests/diagnosticsCases/module-build-failed/loader-emit-hide-stack/rspack.config.js @@ -0,0 +1,18 @@ +/** + * @type {import('@rspack/core').RspackOptions} + */ +module.exports = { + context: __dirname, + module: { + rules: [ + { + test: /lib\.js$/, + use: [ + { + loader: "./my-loader.js" + } + ] + } + ] + } +}; diff --git a/packages/rspack-test-tools/tests/diagnosticsCases/module-build-failed/loader-emit-hide-stack/stats.err b/packages/rspack-test-tools/tests/diagnosticsCases/module-build-failed/loader-emit-hide-stack/stats.err new file mode 100644 index 00000000000..77fcb98ad9c --- /dev/null +++ b/packages/rspack-test-tools/tests/diagnosticsCases/module-build-failed/loader-emit-hide-stack/stats.err @@ -0,0 +1,5 @@ +WARNING in ./lib.js + ⚠ ModuleWarning: Failed to load (from: /tests/diagnosticsCases/module-build-failed/loader-emit-hide-stack/my-loader.js) + +ERROR in ./lib.js + × ModuleError: Failed to load (from: /tests/diagnosticsCases/module-build-failed/loader-emit-hide-stack/my-loader.js) \ No newline at end of file diff --git a/packages/rspack-test-tools/tests/diagnosticsCases/module-build-failed/loader-emit-warning/index.js b/packages/rspack-test-tools/tests/diagnosticsCases/module-build-failed/loader-emit-warning/index.js new file mode 100644 index 00000000000..f521e00df8a --- /dev/null +++ b/packages/rspack-test-tools/tests/diagnosticsCases/module-build-failed/loader-emit-warning/index.js @@ -0,0 +1,10 @@ +it("should include loader thrown error", () => { + let errored = false; + try { + require("./lib"); + } catch (e) { + errored = true; + expect(e.message).toContain("Failed to load"); + } + expect(errored).toBeTruthy() +}); diff --git a/packages/rspack-test-tools/tests/diagnosticsCases/module-build-failed/loader-emit-warning/lib.js b/packages/rspack-test-tools/tests/diagnosticsCases/module-build-failed/loader-emit-warning/lib.js new file mode 100644 index 00000000000..ede7bc80d75 --- /dev/null +++ b/packages/rspack-test-tools/tests/diagnosticsCases/module-build-failed/loader-emit-warning/lib.js @@ -0,0 +1 @@ +export const lib = "lib"; diff --git a/packages/rspack-test-tools/tests/diagnosticsCases/module-build-failed/loader-emit-warning/my-loader.js b/packages/rspack-test-tools/tests/diagnosticsCases/module-build-failed/loader-emit-warning/my-loader.js new file mode 100644 index 00000000000..50d47ab4c40 --- /dev/null +++ b/packages/rspack-test-tools/tests/diagnosticsCases/module-build-failed/loader-emit-warning/my-loader.js @@ -0,0 +1,4 @@ +module.exports = function (context) { + this.emitWarning(new Error("Failed to load")); + return "" +}; diff --git a/packages/rspack-test-tools/tests/diagnosticsCases/module-build-failed/loader-emit-warning/rspack.config.js b/packages/rspack-test-tools/tests/diagnosticsCases/module-build-failed/loader-emit-warning/rspack.config.js new file mode 100644 index 00000000000..69e7f91cadb --- /dev/null +++ b/packages/rspack-test-tools/tests/diagnosticsCases/module-build-failed/loader-emit-warning/rspack.config.js @@ -0,0 +1,18 @@ +/** + * @type {import('@rspack/core').RspackOptions} + */ +module.exports = { + context: __dirname, + module: { + rules: [ + { + test: /lib\.js$/, + use: [ + { + loader: "./my-loader.js" + } + ] + } + ] + } +}; diff --git a/packages/rspack-test-tools/tests/diagnosticsCases/module-build-failed/loader-emit-warning/stats.err b/packages/rspack-test-tools/tests/diagnosticsCases/module-build-failed/loader-emit-warning/stats.err new file mode 100644 index 00000000000..a6e8426f1ef --- /dev/null +++ b/packages/rspack-test-tools/tests/diagnosticsCases/module-build-failed/loader-emit-warning/stats.err @@ -0,0 +1,9 @@ +WARNING in ./lib.js + ⚠ ModuleWarning: Failed to load (from: /tests/diagnosticsCases/module-build-failed/loader-emit-warning/my-loader.js) + │ at xxx + │ at xxx + │ at xxx + │ at xxx + │ at xxx + │ at xxx + │ at xxx \ No newline at end of file diff --git a/packages/rspack/src/loader-runner/index.ts b/packages/rspack/src/loader-runner/index.ts index 216db5d4e48..ba1d5b019de 100644 --- a/packages/rspack/src/loader-runner/index.ts +++ b/packages/rspack/src/loader-runner/index.ts @@ -618,12 +618,10 @@ export async function runLoaders( if (!(error instanceof Error)) { error = new NonErrorEmittedError(error); } - const hasStack = !!error.stack; error.name = "ModuleError"; error.message = `${error.message} (from: ${stringifyLoaderObject( loaderContext.loaders[loaderContext.loaderIndex] )})`; - !hasStack && Error.captureStackTrace(error); error = concatErrorMsgAndStack(error); (error as RspackError).moduleIdentifier = this._module.identifier(); compiler._lastCompilation!.__internal__pushDiagnostic({ @@ -636,12 +634,10 @@ export async function runLoaders( if (!(warning instanceof Error)) { warning = new NonErrorEmittedError(warning); } - const hasStack = !!warning.stack; warning.name = "ModuleWarning"; warning.message = `${warning.message} (from: ${stringifyLoaderObject( loaderContext.loaders[loaderContext.loaderIndex] )})`; - hasStack && Error.captureStackTrace(warning); warning = concatErrorMsgAndStack(warning); (warning as RspackError).moduleIdentifier = this._module.identifier(); compiler._lastCompilation!.__internal__pushDiagnostic({ diff --git a/packages/rspack/src/util/index.ts b/packages/rspack/src/util/index.ts index 790ac734ee7..9195ada166c 100644 --- a/packages/rspack/src/util/index.ts +++ b/packages/rspack/src/util/index.ts @@ -77,7 +77,17 @@ export function concatErrorMsgAndStack( } const hideStack = "hideStack" in err && err.hideStack; if (!hideStack && "stack" in err) { - err.message = err.stack || err.message; + // This is intended to be different than webpack, + // here we want to treat the almost the same as `Error.stack` just without the stack. + // Webpack uses `Error.message`, however it does not contain the `Error.prototype.name` + // `xxx` -> `Error: xxx`. So they behave the same even if `hideStack` is set to `true`. + err.message = err.stack || err.toString(); + } else { + // This is intended to be different than webpack, + // here we want to treat the almost the same as `Error.stack` just without the stack. + // Webpack uses `Error.message`, however it does not contain the `Error.prototype.name` + // `xxx` -> `Error: xxx`. So they behave the same even if `hideStack` is set to `true`. + err.message = err.toString(); } // maybe `null`, use `undefined` to compatible with `Option` err.stack = err.stack || undefined; From 3228af11e9f5cce0b0e2b15b9146a17f478ee4ee Mon Sep 17 00:00:00 2001 From: Hana Date: Thu, 12 Sep 2024 15:07:28 +0800 Subject: [PATCH 2/2] fix --- .../css-extract/cases/build-in-css-support/warnings.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/plugin-test/css-extract/cases/build-in-css-support/warnings.js b/tests/plugin-test/css-extract/cases/build-in-css-support/warnings.js index 6a736f53eda..7f2a178ae8d 100644 --- a/tests/plugin-test/css-extract/cases/build-in-css-support/warnings.js +++ b/tests/plugin-test/css-extract/cases/build-in-css-support/warnings.js @@ -4,7 +4,7 @@ // decide bailout on builtin css module module.exports = `WARNING in ./style.css - ⚠ use type 'css' and \`CssExtractRspackPlugin\` together, please set \`experiments.css\` to \`false\` or set \`{ type: "javascript/auto" }\` for rules with \`CssExtractRspackPlugin\` in your rspack config (now \`CssExtractRspackPlugin\` does nothing). + ⚠ ModuleWarning: use type 'css' and \`CssExtractRspackPlugin\` together, please set \`experiments.css\` to \`false\` or set \`{ type: "javascript/auto" }\` for rules with \`CssExtractRspackPlugin\` in your rspack config (now \`CssExtractRspackPlugin\` does nothing). WARNING in ./style.css ⚠ ModuleWarning: You can't use \`experiments.css\` (\`experiments.futureDefaults\` enable built-in CSS support by default) and \`css-loader\` together, please set \`experiments.css\` to \`false\` or set \`{ type: "javascript/auto" }\` for rules with \`css-loader\` in your webpack config (now css-loader does nothing). `; \ No newline at end of file