From cdebd3246102be2a79546806161d121e5d3e3294 Mon Sep 17 00:00:00 2001 From: Bradley Farias Date: Wed, 4 Sep 2019 11:19:14 -0500 Subject: esm: make dynamic import work in the REPL PR-URL: https://github.com/nodejs/node/pull/29437 Reviewed-By: Luigi Pinca Reviewed-By: Ruben Bridgewater Reviewed-By: Gus Caplan Reviewed-By: David Carlier --- lib/repl.js | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) (limited to 'lib/repl.js') diff --git a/lib/repl.js b/lib/repl.js index d1b9a91df6..4dabe2110d 100644 --- a/lib/repl.js +++ b/lib/repl.js @@ -279,6 +279,12 @@ function REPLServer(prompt, } function defaultEval(code, context, file, cb) { + const { getOptionValue } = require('internal/options'); + const experimentalModules = getOptionValue('--experimental-modules'); + const asyncESM = experimentalModules ? + require('internal/process/esm_loader') : + null; + let result, script, wrappedErr; let err = null; let wrappedCmd = false; @@ -312,6 +318,12 @@ function REPLServer(prompt, if (code === '\n') return cb(null); + let pwd; + try { + const { pathToFileURL } = require('url'); + pwd = pathToFileURL(process.cwd()).href; + } catch { + } while (true) { try { if (!/^\s*$/.test(code) && @@ -322,7 +334,12 @@ function REPLServer(prompt, } script = vm.createScript(code, { filename: file, - displayErrors: true + displayErrors: true, + importModuleDynamically: experimentalModules ? + async (specifier) => { + return (await asyncESM.loaderPromise).import(specifier, pwd); + } : + undefined }); } catch (e) { debug('parse error %j', code, e); -- cgit v1.2.3