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


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


vm.createContext([contextObject[, options]])

历史
版本变化
v14.6.0

现在支持microtaskMode 选项。

v10.0.0

第一个参数不能再是函数。

v10.0.0

现在支持codeGeneration 选项。

v0.3.1

添加于:v0.3.1


参数
  • contextObject <Object>
  • options <Object>
    • name <string> 新创建的上下文的人类可读名称。 默认: 'VM Context i' ,其中 i 是已创建上下文的升序数字索引。
    • origin <string> Origin 对应于新创建的用于显示目的的上下文。源的格式应类似于 URL,但仅包含方案、主机和端口(如有必要),例如 URL 对象的 url.origin 属性的值。最值得注意的是,此字符串应省略尾部斜杠,因为它表示路径。 默认: ''
    • codeGeneration <Object>
      • strings <boolean> 如果设置为 false,对 eval 或函数构造函数( FunctionGeneratorFunction 等)的任何调用都会抛出 EvalError默认: true
      • wasm <boolean> 如果设置为 false,任何编译 WebAssembly 模块的尝试都会抛出 WebAssembly.CompileError默认: true
    • microtaskMode <string> 如果设置为 afterEvaluate ,则微任务(通过 Promise s 和 async function s 安排的任务)将在脚本通过 script.runInContext() 后立即运行。在这种情况下,它们包含在 timeoutbreakOnSigint 范围内。
  • 返回: <Object> 上下文对象。

如果给定 contextObject ,则 vm.createContext() 方法将 prepare that object 以便它可以用于调用 vm.runInContext() script.runInContext() 。在此类脚本中,contextObject 将是全局对象,保留其所有现有属性,但也具有任何标准global object 具有的内置对象和函数。在 vm 模块运行的脚本之外,全局变量将保持不变。

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

global.globalVar = 3;

const context = { globalVar: 1 };
vm.createContext(context);

vm.runInContext('globalVar *= 2;', context);

console.log(context);
// Prints: { globalVar: 2 }

console.log(global.globalVar);
// Prints: 3

如果 contextObject 被省略(或显式传递为 undefined ),则将返回一个新的空 contextified 对象。

vm.createContext() 方法主要用于创建可用于运行多个脚本的单个上下文。例如,如果模拟 Web 浏览器,该方法可用于创建表示窗口全局对象的单个上下文,然后在该上下文中一起运行所有 <script> 标记。

提供的上下文的nameorigin 通过 Inspector API 可见。

相关用法


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