当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Node.js vm.runInThisContext(code[, options])用法及代码示例


vm.runInThisContext(code[, options])

历史
版本变化
v17.0.0、v16.12.0

importModuleDynamically 参数添加了对导入断言的支持。

v6.3.0

现在支持breakOnSigint 选项。

v0.3.1

添加于:v0.3.1


参数
  • code <string> 要编译和运行的 JavaScript 代码。
  • options <Object>|<string>
    • filename <string> 指定此脚本生成的堆栈跟踪中使用的文件名。 默认: 'evalmachine.<anonymous>'
    • lineOffset <number> 指定在此脚本生成的堆栈跟踪中显示的行号偏移量。 默认: 0
    • columnOffset <number> 指定在此脚本生成的堆栈跟踪中显示的first-line 列号偏移量。 默认: 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> 为提供的源提供可选的 BufferTypedArrayDataView 以及 V8 的代码缓存数据。提供时,cachedDataRejected 值将根据 V8 对数据的接受情况设置为 truefalse
    • produceCachedData <boolean>什么时候true和不cachedData存在时,V8 将尝试为code.成功后,一个Buffer使用 V8 的代码缓存数据将被生成并存储在cachedData归还的属性vm.Script实例。这cachedDataProduced值将设置为true或者false取决于代码缓存数据是否产生成功。这个选项是已弃用有利于script.createCachedData().默认: false.
    • importModuleDynamically <Function>在评估此模块时调用import()叫做。如果未指定此选项,则调用import()会拒绝ERR_VM_DYNAMIC_IMPORT_CALLBACK_MISSING.此选项是实验模块 API 的一部分。我们不建议在生产环境中使用它。
  • 返回: <any> 脚本中执行的最后一条语句的结果。

vm.runInThisContext() 编译 code ,在当前 global 的上下文中运行它并返回结果。运行代码无权访问本地范围,但可以访问当前的global 对象。

如果options 是字符串,则它指定文件名。

以下示例说明了使用 vm.runInThisContext() 和 JavaScript eval() 函数来运行相同的代码:

const vm = require('node:vm');
let localVar = 'initial value';

const vmResult = vm.runInThisContext('localVar = "vm";');
console.log(`vmResult: '${vmResult}', localVar: '${localVar}'`);
// Prints: vmResult: 'vm', localVar: 'initial value'

const evalResult = eval('localVar = "eval";');
console.log(`evalResult: '${evalResult}', localVar: '${localVar}'`);
// Prints: evalResult: 'eval', localVar: 'eval'

因为vm.runInThisContext()无权访问本地范围,localVar不变。相比之下,eval()确实可以访问本地范围,所以值localVar被改变。这样vm.runInThisContext()很像一个间接 eval() 调用,例如(0,eval)('code').

相关用法


注:本文由纯净天空筛选整理自nodejs.org大神的英文原创作品 vm.runInThisContext(code[, options])。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。