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


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

vm.runInNewContext(code[, contextObject[, options]])

曆史
版本變化
v17.0.0、v16.12.0

importModuleDynamically 參數添加了對導入斷言的支持。

v14.6.0

現在支持microtaskMode 選項。

v10.0.0

現在支持contextCodeGeneration 選項。

v6.3.0

現在支持breakOnSigint 選項。

v0.3.1

添加於:v0.3.1


參數
  • code <string> 要編譯和運行的 JavaScript 代碼。
  • contextObject <Object> 將是 contextified 的對象。如果 undefined ,將創建一個新對象。
  • 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.
    • 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
    • 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 的一部分。我們不建議在生產環境中使用它。
    • microtaskMode <string> 如果設置為 afterEvaluate ,微任務(通過 Promise s 和 async function s 安排的任務)將在腳本運行後立即運行。在這種情況下,它們包含在 timeoutbreakOnSigint 範圍內。
  • 返回: <any> 腳本中執行的最後一條語句的結果。

vm.runInNewContext() 首先將給定的 contextObject 上下文化(或創建一個新的 contextObject 如果作為 undefined 傳遞),編譯 code ,在創建的上下文中運行它,然後返回結果。運行代碼無權訪問本地範圍。

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

以下示例編譯並執行遞增全局變量並設置新變量的代碼。這些全局變量包含在 contextObject 中。

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

const contextObject = {
  animal: 'cat',
  count: 2
};

vm.runInNewContext('count += 1; name = "kitty"', contextObject);
console.log(contextObject);
// Prints: { animal: 'cat', count: 3, name: 'kitty' }

相關用法


注:本文由純淨天空篩選整理自nodejs.org大神的英文原創作品 vm.runInNewContext(code[, contextObject[, options]])。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。