Skip to content

Commit

Permalink
esm: exit the process with an error if loader has an issue
Browse files Browse the repository at this point in the history
Previously, this would trigger an unhandled rejection that the user
cannot handle.

Fixes: #30205

PR-URL: #30219
Reviewed-By: Guy Bedford <[email protected]>
Reviewed-By: Colin Ihrig <[email protected]>
Reviewed-By: Anna Henningsen <[email protected]>
Reviewed-By: Yongsheng Zhang <[email protected]>
  • Loading branch information
targos committed Nov 9, 2019
1 parent 0356746 commit 8bb83f4
Show file tree
Hide file tree
Showing 5 changed files with 43 additions and 10 deletions.
20 changes: 10 additions & 10 deletions lib/internal/bootstrap/pre_execution.js
Original file line number Diff line number Diff line change
Expand Up @@ -484,16 +484,16 @@ function runMainESM(mainPath) {
return esmLoader.initializeLoader().then(() => {
const main = path.isAbsolute(mainPath) ?
pathToFileURL(mainPath).href : mainPath;
return esmLoader.ESMLoader.import(main).catch((e) => {
if (hasUncaughtExceptionCaptureCallback()) {
process._fatalException(e);
return;
}
internalBinding('errors').triggerUncaughtException(
e,
true /* fromPromise */
);
});
return esmLoader.ESMLoader.import(main);
}).catch((e) => {
if (hasUncaughtExceptionCaptureCallback()) {
process._fatalException(e);
return;
}
internalBinding('errors').triggerUncaughtException(
e,
true /* fromPromise */
);
});
}

Expand Down
3 changes: 3 additions & 0 deletions test/message/esm_loader_not_found.mjs
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
// Flags: --experimental-modules --experimental-loader i-dont-exist
import '../common/index.mjs';
console.log('This should not be printed');
18 changes: 18 additions & 0 deletions test/message/esm_loader_not_found.out
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
(node:*) ExperimentalWarning: The ESM module loader is experimental.
(node:*) ExperimentalWarning: --experimental-loader is an experimental feature. This feature could change at any time
internal/modules/esm/default_resolve.js:*
let url = moduleWrapResolve(specifier, parentURL);
^

Error: Cannot find package 'i-dont-exist' imported from *
at Loader.resolve [as _resolve] (internal/modules/esm/default_resolve.js:*:*)
at Loader.resolve (internal/modules/esm/loader.js:*:*)
at Loader.getModuleJob (internal/modules/esm/loader.js:*:*)
at Loader.import (internal/modules/esm/loader.js:*:*)
at internal/process/esm_loader.js:*:*
at Object.initializeLoader (internal/process/esm_loader.js:*:*)
at runMainESM (internal/bootstrap/pre_execution.js:*:*)
at Function.Module.runMain (internal/modules/cjs/loader.js:*:*)
at internal/main/run_main_module.js:*:* {
code: 'ERR_MODULE_NOT_FOUND'
}
3 changes: 3 additions & 0 deletions test/message/esm_loader_syntax_error.mjs
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
// Flags: --experimental-modules --experimental-loader ./test/fixtures/es-module-loaders/syntax-error.mjs
import '../common/index.mjs';
console.log('This should not be printed');
9 changes: 9 additions & 0 deletions test/message/esm_loader_syntax_error.out
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
(node:*) ExperimentalWarning: The ESM module loader is experimental.
(node:*) ExperimentalWarning: --experimental-loader is an experimental feature. This feature could change at any time
file://*/test/fixtures/es-module-loaders/syntax-error.mjs:2
await async () => 0;
^^^^^

SyntaxError: Unexpected reserved word
at Loader.moduleStrategy (internal/modules/esm/translators.js:*:*)
at async link (internal/modules/esm/module_job.js:*:*)

0 comments on commit 8bb83f4

Please sign in to comment.