vm.runInContext(code, contextifiedObject[, options])
code
<string> 要编译和运行的 JavaScript 代码。contextifiedObject
<Object> 编译和运行code
时将用作global
的上下文隔离化的对象。options
<Object> | <string>filename
<string> 指定此脚本生成的堆栈跟踪中使用的文件名。 默认值:'evalmachine.<anonymous>'
。lineOffset
<number> 指定在此脚本生成的堆栈跟踪中显示的行号偏移量。 默认值:0
。columnOffset
<number> 指定在此脚本生成的堆栈跟踪中显示的第一行列号偏移量。 默认值:0
。displayErrors
<boolean> 当为true
时,如果编译code
时出现Error
,则导致错误的代码行会附加到堆栈跟踪中。 默认值:true
。timeout
<integer> 指定终止执行前执行code
的毫秒数。 如果执行终止,则将抛出Error
。 此值必须是严格的正整数。breakOnSigint
<boolean> 如果为true
,则接收SIGINT
(Ctrl+C)将终止执行并抛出Error
。 已通过process.on('SIGINT')
附加的事件的现有句柄在脚本执行期间被禁用,但在此之后继续工作。 默认值:false
。cachedData
<Buffer> | <TypedArray> | <DataView> 为所提供的源提供可选的Buffer
或TypedArray
或DataView
,其中包含 V8 的代码缓存数据。importModuleDynamically
<Function> 在调用import()
时在评估此模块期间调用。 如果未指定此选项,则调用import()
将使用ERR_VM_DYNAMIC_IMPORT_CALLBACK_MISSING
拒绝。 此选项是实验模块 API 的一部分。 不建议在生产环境中使用它。specifier
<string> 传给import()
的说明符script
<vm.Script>importAssertions
<Object> 传给optionsExpression
可选参数的"assert"
值,如果没有提供值,则为空对象。- 返回: <Module Namespace Object> | <vm.Module> 建议返回
vm.Module
以利用错误跟踪,并避免包含then
函数导出的命名空间出现问题。
- 返回: <any> 脚本中执行的最后一条语句的结果。
vm.runInContext()
方法编译 code
,在 contextifiedObject
的上下文中运行它,然后返回结果。
运行代码无权访问本地作用域。
contextifiedObject
对象必须之前已经使用 vm.createContext()
方法上下文隔离化。
如果 options
是字符串,则指定文件名。
以下示例使用单个上下文隔离化的对象编译并执行不同的脚本:
const vm = require('node:vm');
const contextObject = { globalVar: 1 };
vm.createContext(contextObject);
for (let i = 0; i < 10; ++i) {
vm.runInContext('globalVar *= 2;', contextObject);
}
console.log(contextObject);
// 打印: { globalVar: 1024 }
code
<string> The JavaScript code to compile and run.contextifiedObject
<Object> The contextified object that will be used as theglobal
when thecode
is compiled and run.options
<Object> | <string>filename
<string> Specifies the filename used in stack traces produced by this script. Default:'evalmachine.<anonymous>'
.lineOffset
<number> Specifies the line number offset that is displayed in stack traces produced by this script. Default:0
.columnOffset
<number> Specifies the first-line column number offset that is displayed in stack traces produced by this script. Default:0
.displayErrors
<boolean> Whentrue
, if anError
occurs while compiling thecode
, the line of code causing the error is attached to the stack trace. Default:true
.timeout
<integer> Specifies the number of milliseconds to executecode
before terminating execution. If execution is terminated, anError
will be thrown. This value must be a strictly positive integer.breakOnSigint
<boolean> Iftrue
, receivingSIGINT
(Ctrl+C) will terminate execution and throw anError
. Existing handlers for the event that have been attached viaprocess.on('SIGINT')
are disabled during script execution, but continue to work after that. Default:false
.cachedData
<Buffer> | <TypedArray> | <DataView> Provides an optionalBuffer
orTypedArray
, orDataView
with V8's code cache data for the supplied source.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
. This option is part of the experimental modules API. We do not recommend using it in a production environment.specifier
<string> specifier passed toimport()
script
<vm.Script>importAssertions
<Object> The"assert"
value passed to theoptionsExpression
optional parameter, or an empty object if no value was provided.- Returns: <Module Namespace Object> | <vm.Module> Returning a
vm.Module
is recommended in order to take advantage of error tracking, and to avoid issues with namespaces that containthen
function exports.
- Returns: <any> the result of the very last statement executed in the script.
The vm.runInContext()
method compiles code
, runs it within the context of
the contextifiedObject
, then returns the result. Running code does not have
access to the local scope. The contextifiedObject
object must have been
previously contextified using the vm.createContext()
method.
If options
is a string, then it specifies the filename.
The following example compiles and executes different scripts using a single contextified object:
const vm = require('node:vm');
const contextObject = { globalVar: 1 };
vm.createContext(contextObject);
for (let i = 0; i < 10; ++i) {
vm.runInContext('globalVar *= 2;', contextObject);
}
console.log(contextObject);
// Prints: { globalVar: 1024 }