@@ -57,6 +57,7 @@ function evalModule(source, print) {
57
57
function evalScript ( name , body , breakFirstLine , print ) {
58
58
const CJSModule = require ( 'internal/modules/cjs/loader' ) . Module ;
59
59
const { kVmBreakFirstLineSymbol } = require ( 'internal/util' ) ;
60
+ const { pathToFileURL } = require ( 'url' ) ;
60
61
61
62
const cwd = tryGetCwd ( ) ;
62
63
const origModule = global . module ; // Set e.g. when called from the REPL.
@@ -65,35 +66,29 @@ function evalScript(name, body, breakFirstLine, print) {
65
66
module . filename = path . join ( cwd , name ) ;
66
67
module . paths = CJSModule . _nodeModulePaths ( cwd ) ;
67
68
68
- let fileURL ;
69
- module . importModuleDynamically = async ( specifier ) => {
70
- if ( ! fileURL ) {
71
- const { pathToFileURL } = require ( 'url' ) ;
72
- fileURL = pathToFileURL ( path . join ( cwd , name ) ) . href ;
73
- }
69
+ global . kVmBreakFirstLineSymbol = kVmBreakFirstLineSymbol ;
70
+ global . asyncESM = require ( 'internal/process/esm_loader' ) ;
74
71
75
- const asyncESM = require ( 'internal/process/esm_loader' ) ;
76
- const loader = await asyncESM . ESMLoader ;
77
- return loader . import ( specifier , fileURL ) ;
78
- } ;
72
+ const baseUrl = pathToFileURL ( module . filename ) . href ;
79
73
80
- global . kVmBreakFirstLineSymbol = kVmBreakFirstLineSymbol ;
81
74
const script = `
82
75
global.__filename = ${ JSONStringify ( name ) } ;
83
76
global.exports = exports;
84
77
global.module = module;
85
78
global.__dirname = __dirname;
86
79
global.require = require;
87
- const { kVmBreakFirstLineSymbol } = global;
80
+ const { kVmBreakFirstLineSymbol, asyncESM } = global;
88
81
delete global.kVmBreakFirstLineSymbol;
89
- const { importModuleDynamically } = module;
90
- delete module.importModuleDynamically;
82
+ delete global.asyncESM;
91
83
return require("vm").runInThisContext(
92
84
${ JSONStringify ( body ) } , {
93
85
filename: ${ JSONStringify ( name ) } ,
94
86
displayErrors: true,
95
87
[kVmBreakFirstLineSymbol]: ${ ! ! breakFirstLine } ,
96
- importModuleDynamically
88
+ async importModuleDynamically (specifier) {
89
+ const loader = await asyncESM.ESMLoader;
90
+ return loader.import(specifier, ${ JSONStringify ( baseUrl ) } );
91
+ }
97
92
});\n` ;
98
93
const result = module . _compile ( script , `${ name } -wrapper` ) ;
99
94
if ( print ) {
0 commit comments