當前位置: 首頁>>編程示例 >>用法及示例精選 >>正文


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]])。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。