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


Node.js vm.Script.runInNewContext([contextObject[, options]])用法及代码示例


script.runInNewContext([contextObject[, options]])

历史
版本变化
v14.6.0

现在支持microtaskMode 选项。

v10.0.0

现在支持contextCodeGeneration 选项。

v6.3.0

现在支持breakOnSigint 选项。

v0.3.1

添加于:v0.3.1


参数
  • contextObject <Object> 将是 contextified 的对象。如果 undefined ,将创建一个新对象。
  • options <Object>
    • displayErrors <boolean>true 时,如果在编译 code 时发生 Error ,则导致错误的代码行附加到堆栈跟踪。 默认: true
    • timeout <integer> 指定在终止执行之前执行 code 的毫秒数。如果执行终止,将抛出 Error 。该值必须是严格的正整数。
    • breakOnSigint <boolean>如果true, 接收SIGINT(Ctrl+C) 将终止执行并抛出一个Error.已通过以下方式附加的事件的现有处理程序process.on('SIGINT')在脚本执行期间被禁用,但之后继续工作。默认: false.
    • contextName <string> 新创建的上下文的人类可读名称。 默认: 'VM Context i' ,其中 i 是已创建上下文的升序数字索引。
    • contextOrigin <string> Origin 对应于新创建的用于显示目的的上下文。源的格式应类似于 URL,但仅包含方案、主机和端口(如有必要),例如 URL 对象的 url.origin 属性的值。最值得注意的是,此字符串应省略尾部斜杠,因为它表示路径。 默认: ''
    • contextCodeGeneration <Object>
      • strings <boolean> 如果设置为 false,对 eval 或函数构造函数( FunctionGeneratorFunction 等)的任何调用都会抛出 EvalError默认: true
      • wasm <boolean> 如果设置为 false,任何编译 WebAssembly 模块的尝试都会抛出 WebAssembly.CompileError默认: true
    • microtaskMode <string> 如果设置为 afterEvaluate ,微任务(通过 Promise s 和 async function s 安排的任务)将在脚本运行后立即运行。在这种情况下,它们包含在 timeoutbreakOnSigint 范围内。
  • 返回: <any> 脚本中执行的最后一条语句的结果。

首先将给定的 contextObject 上下文化,在创建的上下文中运行 vm.Script 对象包含的编译代码,并返回结果。运行代码无权访问本地范围。

以下示例编译设置全局变量的代码,然后在不同的上下文中多次执行该代码。全局变量设置在每个单独的 context 上并包含在其中。

const vm = require('node:vm');

const script = new vm.Script('globalVar = "set"');

const contexts = [{}, {}, {}];
contexts.forEach((context) => {
  script.runInNewContext(context);
});

console.log(contexts);
// Prints: [{ globalVar: 'set' }, { globalVar: 'set' }, { globalVar: 'set' }]

相关用法


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