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


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