diff --git a/lib/internal/modules/cjs/loader.js b/lib/internal/modules/cjs/loader.js index 080e233213c3c9..2f55b09c149f75 100644 --- a/lib/internal/modules/cjs/loader.js +++ b/lib/internal/modules/cjs/loader.js @@ -904,20 +904,19 @@ Module._resolveFilename = function(request, parent, isMain, options) { paths = Module._resolveLookupPaths(request, parent); } - if (parent?.filename) { - if (request[0] === '#') { - const pkg = readPackageScope(parent.filename) || {}; - if (pkg.data?.imports != null) { - try { - return finalizeEsmResolution( - packageImportsResolve(request, pathToFileURL(parent.filename), - cjsConditions), parent.filename, - pkg.path); - } catch (e) { - if (e.code === 'ERR_MODULE_NOT_FOUND') - throw createEsmNotFoundErr(request); - throw e; - } + if (request[0] === '#' && (parent?.filename || parent?.id === '')) { + const parentPath = parent?.filename ?? process.cwd() + path.sep; + const pkg = readPackageScope(parentPath) || {}; + if (pkg.data?.imports != null) { + try { + return finalizeEsmResolution( + packageImportsResolve(request, pathToFileURL(parentPath), + cjsConditions), parentPath, + pkg.path); + } catch (e) { + if (e.code === 'ERR_MODULE_NOT_FOUND') + throw createEsmNotFoundErr(request); + throw e; } } } diff --git a/test/es-module/test-esm-repl-imports.js b/test/es-module/test-esm-repl-imports.js new file mode 100644 index 00000000000000..d2b39e05fb0588 --- /dev/null +++ b/test/es-module/test-esm-repl-imports.js @@ -0,0 +1,19 @@ +'use strict'; +const { mustCall } = require('../common'); +const assert = require('assert'); +const fixtures = require('../common/fixtures'); +const { spawn } = require('child_process'); + +const child = spawn(process.execPath, [ + '--interactive', +], { + cwd: fixtures.path('es-modules', 'pkgimports'), +}); + +child.stdin.end( + 'try{require("#test");await import("#test")}catch{process.exit(-1)}' +); + +child.on('exit', mustCall((code) => { + assert.strictEqual(code, 0); +}));