如何使 `import` 语句在使用 node:vm 模块创建的代码中正常工作?
How to make the `import` statement work properly inside the code created using the node:vm module?
在我们的项目中,我们有用作记录器的自定义 console
对象。
所以我们需要替换默认的console
.
为此,我们决定使用 vm 模块。
但是我们在使用 vm.Script
:
创建的代码中使用 imports 时遇到了问题
application.js:
import path from 'path';
console.log(path.resolve('./apps'));
main.js:
const context = {
console,
global: {},
module: {},
exports: {},
require,
};
context.global = global;
const sandbox = vm.createContext(context);
const fileName = './application.js';
const src = await fsp.readFile(fileName, 'utf8');
const script = new vm.Script(`module.exports = () => {\n${src}\n};`);
const execute = script.runInNewContext(sandbox);
execute();
输出:
错误: 找不到模块 'path'
问题:
如何使导入在 application.js 文件中正常工作?
请勿使用 new vm.Script
if you want to create a module. Use a new vm.Module
!请注意,API 仍处于实验阶段。
在我们的项目中,我们有用作记录器的自定义 console
对象。
所以我们需要替换默认的console
.
为此,我们决定使用 vm 模块。
但是我们在使用 vm.Script
:
application.js:
import path from 'path';
console.log(path.resolve('./apps'));
main.js:
const context = {
console,
global: {},
module: {},
exports: {},
require,
};
context.global = global;
const sandbox = vm.createContext(context);
const fileName = './application.js';
const src = await fsp.readFile(fileName, 'utf8');
const script = new vm.Script(`module.exports = () => {\n${src}\n};`);
const execute = script.runInNewContext(sandbox);
execute();
输出:
错误: 找不到模块 'path'
问题:
如何使导入在 application.js 文件中正常工作?
请勿使用 new vm.Script
if you want to create a module. Use a new vm.Module
!请注意,API 仍处于实验阶段。