diff --git a/lib/internal/modules/esm/loader.js b/lib/internal/modules/esm/loader.js index 0ea1e6f4e56..bffefa884e4 100644 --- a/lib/internal/modules/esm/loader.js +++ b/lib/internal/modules/esm/loader.js @@ -9,7 +9,10 @@ const { ERR_MISSING_DYNAMIC_INSTANTIATE_HOOK, ERR_UNKNOWN_MODULE_FORMAT } = require('internal/errors').codes; -const { URL } = require('url'); +const { + URL, + pathToFileURL +} = require('url'); const { validateString } = require('internal/validators'); const ModuleMap = require('internal/modules/esm/module_map'); const ModuleJob = require('internal/modules/esm/module_job'); @@ -107,7 +110,10 @@ class Loader { return { url, format }; } - async eval(source, url = `eval:${++this.evalIndex}`) { + async eval( + source, + url = pathToFileURL(`${process.cwd()}/[eval${++this.evalIndex}]`).href + ) { const evalInstance = async (url) => { return { module: new ModuleWrap(source, url), diff --git a/test/message/async_error_eval_esm.out b/test/message/async_error_eval_esm.out index 91ce0ce21cd..578a9f5c261 100644 --- a/test/message/async_error_eval_esm.out +++ b/test/message/async_error_eval_esm.out @@ -1,7 +1,7 @@ Error: test - at one (eval:1:2:9) - at two (eval:1:15:9) + at one (file:*/[eval1]:2:9) + at two (file:*/[eval1]:15:9) at processTicksAndRejections (internal/process/task_queues.js:*:*) - at async three (eval:1:18:3) - at async four (eval:1:22:3) - at async main (eval:1:28:5) + at async three (file:*/[eval1]:18:3) + at async four (file:*/[eval1]:22:3) + at async main (file:*/[eval1]:28:5) diff --git a/test/parallel/test-cli-eval.js b/test/parallel/test-cli-eval.js index acf20bb77fc..0d2ea48c06f 100644 --- a/test/parallel/test-cli-eval.js +++ b/test/parallel/test-cli-eval.js @@ -274,3 +274,12 @@ child.exec( assert.ifError(err); assert.strictEqual(stdout, 'object\n'); })); + +// Assert that packages can be imported cwd-relative with --eval +child.exec( + `${nodejs} ${execOptions} ` + + '--eval "import \'./test/fixtures/es-modules/mjs-file.mjs\'"', + common.mustCall((err, stdout) => { + assert.ifError(err); + assert.strictEqual(stdout, '.mjs file\n'); + }));