new vm.SourceTextModule(code[, options])
-
code<string> 要解析的 JavaScript 模块代码¥
code<string> JavaScript Module code to parse -
options-
identifier<string> 用于堆栈跟踪的字符串。默认值:'vm:module(i)',其中i是上下文特定的升序索引。¥
identifier<string> String used in stack traces. Default:'vm:module(i)'whereiis a context-specific ascending index. -
cachedData<Buffer> | <TypedArray> | <DataView> 为所提供的源提供可选的Buffer或TypedArray或DataView,其中包含 V8 的代码缓存数据。code必须与创建此cachedData的模块相同。¥
cachedData<Buffer> | <TypedArray> | <DataView> Provides an optionalBufferorTypedArray, orDataViewwith V8's code cache data for the supplied source. Thecodemust be the same as the module from which thiscachedDatawas created. -
context<Object>vm.createContext()方法返回的 contextified 对象,用于编译和评估此Module中的对象。如果未指定上下文,则在当前执行上下文中评估模块。¥
context<Object> The contextified object as returned by thevm.createContext()method, to compile and evaluate thisModulein. If no context is specified, the module is evaluated in the current execution context. -
lineOffset<integer> 指定在此Module产生的堆栈跟踪中显示的行号偏移量。默认值:0。¥
lineOffset<integer> Specifies the line number offset that is displayed in stack traces produced by thisModule. Default:0. -
columnOffset<integer> 指定在此Module生成的堆栈跟踪中显示的第一行列号偏移量。默认值:0。¥
columnOffset<integer> Specifies the first-line column number offset that is displayed in stack traces produced by thisModule. Default:0. -
initializeImportMeta<Function> 在评估此Module期间调用以初始化import.meta。¥
initializeImportMeta<Function> Called during evaluation of thisModuleto initialize theimport.meta.-
meta<import.meta> -
module<vm.SourceTextModule>
-
-
importModuleDynamically<Function> 在调用import()时在评估此模块期间调用。如果未指定此选项,则调用import()将使用ERR_VM_DYNAMIC_IMPORT_CALLBACK_MISSING拒绝。如果未设置--experimental-vm-modules,则该回调将被忽略,对import()的调用将被拒绝并返回ERR_VM_DYNAMIC_IMPORT_CALLBACK_MISSING_FLAG。¥
importModuleDynamically<Function> Called during evaluation of this module whenimport()is called. If this option is not specified, calls toimport()will reject withERR_VM_DYNAMIC_IMPORT_CALLBACK_MISSING. If--experimental-vm-modulesisn't set, this callback will be ignored and calls toimport()will reject withERR_VM_DYNAMIC_IMPORT_CALLBACK_MISSING_FLAG.-
specifier<string> 说明符传递给import()¥
specifier<string> specifier passed toimport() -
module<vm.Module> -
importAttributes<Object> 传给optionsExpression可选参数的"assert"值,如果没有提供值,则为空对象。¥
importAttributes<Object> The"assert"value passed to theoptionsExpressionoptional parameter, or an empty object if no value was provided. -
返回:<Module Namespace Object> | <vm.Module> 建议返回
vm.Module以利用错误跟踪,并避免包含then函数导出的命名空间出现问题。¥Returns: <Module Namespace Object> | <vm.Module> Returning a
vm.Moduleis recommended in order to take advantage of error tracking, and to avoid issues with namespaces that containthenfunction exports.
-
-
创建新的 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 = {};
},
});
// Since module has no dependencies, the linker function will never be called.
await module.link(() => {});
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 = {};
},
});
// Since module has no dependencies, the linker function will never be called.
await module.link(() => {});
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);
})();