From 49fb529139ff4b43f472e24f2015482af82446b6 Mon Sep 17 00:00:00 2001 From: Corey Farrell Date: Fri, 22 Nov 2019 22:06:43 -0500 Subject: repl: fix referrer for dynamic import The ESM loader does not accept a directory as the referrer, it requires a path within the directory. Add `/repl` to ensure relative dynamic imports can succeed. Fixes: https://github.com/nodejs/node/issues/19570 PR-URL: https://github.com/nodejs/node/pull/30609 Reviewed-By: Gus Caplan Reviewed-By: Anna Henningsen Reviewed-By: Ben Coe --- lib/repl.js | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) (limited to 'lib') diff --git a/lib/repl.js b/lib/repl.js index e304bc2e77..c1473588d3 100644 --- a/lib/repl.js +++ b/lib/repl.js @@ -332,10 +332,12 @@ function REPLServer(prompt, if (code === '\n') return cb(null); - let pwd; + let parentURL; try { const { pathToFileURL } = require('url'); - pwd = pathToFileURL(process.cwd()).href; + // Adding `/repl` prevents dynamic imports from loading relative + // to the parent of `process.cwd()`. + parentURL = pathToFileURL(path.join(process.cwd(), 'repl')).href; } catch { } while (true) { @@ -350,7 +352,7 @@ function REPLServer(prompt, filename: file, displayErrors: true, importModuleDynamically: async (specifier) => { - return asyncESM.ESMLoader.import(specifier, pwd); + return asyncESM.ESMLoader.import(specifier, parentURL); } }); } catch (e) { -- cgit v1.2.3