new vm.SourceTextModule(code[, options])
code<string> 解析 JavaScript 模块的代码optionsidentifier<string> 用于堆栈跟踪的字符串。 默认值:'vm:module(i)',其中i是上下文特定的递增索引。cachedData<Buffer> | <TypedArray> | <DataView> 提供可选的Buffer或TypedArray,或带有 V8 代码缓存数据的DataView,用于提供的源代码。code必须与创建该cachedData的模块相同。context<Object> 由vm.createContext()方法返回的 情境化 对象,用于在其中编译和评估此Module。如果未指定上下文,则模块将在当前执行上下文中评估。lineOffset<integer> 指定此Module生成的堆栈跟踪中显示的行号偏移量。默认值:0。columnOffset<integer> 指定在此Module生成的堆栈跟踪中显示的首行列号偏移量。默认值:0。initializeImportMeta<Function> 在评估此Module时被调用,用于初始化import.meta。meta<import.meta>module<vm.SourceTextModule>
importModuleDynamically<Function> 用于指定在调用import()时评估此模块时模块应如何加载。此选项是实验性模块 API 的一部分。我们不建议在生产环境中使用它。有关详细信息,请参阅 在编译 API 中支持动态import()。
创建一个新的 SourceTextModule 实例。
【Creates a new SourceTextModule instance.】
分配给 import.meta 对象的属性如果是对象,可能允许模块访问指定 context 之外的信息。使用 vm.runInContext() 可以在特定上下文中创建对象。
【Properties assigned to the import.meta object that are objects may
allow the module to access information outside the specified context. Use
vm.runInContext() to create objects in a specific context.】
import vm from 'node:vm';
const contextifiedObject = vm.createContext({ secret: 42 });
const module = new vm.SourceTextModule(
'Object.getPrototypeOf(import.meta.prop).secret = secret;',
{
initializeImportMeta(meta) {
// Note: this object is created in the top context. As such,
// Object.getPrototypeOf(import.meta.prop) points to the
// Object.prototype in the top context rather than that in
// the contextified object.
meta.prop = {};
},
});
// The module has an empty `moduleRequests` array.
module.linkRequests([]);
module.instantiate();
await module.evaluate();
// Now, Object.prototype.secret will be equal to 42.
//
// To fix this problem, replace
// meta.prop = {};
// above with
// meta.prop = vm.runInContext('{}', contextifiedObject);const vm = require('node:vm');
const contextifiedObject = vm.createContext({ secret: 42 });
(async () => {
const module = new vm.SourceTextModule(
'Object.getPrototypeOf(import.meta.prop).secret = secret;',
{
initializeImportMeta(meta) {
// Note: this object is created in the top context. As such,
// Object.getPrototypeOf(import.meta.prop) points to the
// Object.prototype in the top context rather than that in
// the contextified object.
meta.prop = {};
},
});
// The module has an empty `moduleRequests` array.
module.linkRequests([]);
module.instantiate();
await module.evaluate();
// Now, Object.prototype.secret will be equal to 42.
//
// To fix this problem, replace
// meta.prop = {};
// above with
// meta.prop = vm.runInContext('{}', contextifiedObject);
})();