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


Node.js vm.runInNewContext()用法及代碼示例

vm.runInNewContext()方法將聲明的contextObject上下文化,編譯所編寫的代碼並在創建的上下文中運行它,然後所有這些返回輸出。但是,正在運行的代碼無法訪問本地作用域。

用法:

vm.runInNewContext( code, contextObject, options )

參數:此方法接受上述和以下所述的三個參數:



  • code:它是要編譯和運行的JavaScript代碼。
  • contextObject:這是一個將被上下文化的對象,如果未定義,將創建一個新對象。
  • options:它是一個可選參數,返回Object或string,如果它是字符串,則它定義返回string的文件名。它具有以下參數:
    1. filename:它包含一個字符串,該字符串指定此腳本生成的堆棧跟蹤中使用的文件名。默認值為“ evalmachine.anonymous”。
    2. lineOffset:它包含一個數字,該數字指定此腳本生成的堆棧跟蹤中顯示的行號的偏移量。默認值為0。
    3. columnOffset:它包含一個數字,該數字指定此腳本生成的堆棧跟蹤中顯示的列號的偏移量。默認值為0。
    4. displayErrors:它包含一個布爾值,即如果在編譯代碼時引發錯誤,並且由於該原因而引發錯誤的代碼行鏈接到堆棧跟蹤,則為true。默認值為true。
    5. timeout:它包含一個整數值,該整數指定在結束執行之前執行指定代碼所花費的毫秒數。但是,如果關閉執行,則將發生錯誤,並且此值必須絕對為正整數。
    6. breakOnSigint:它擁有一個布爾值。如果為true,則在提供SIGINT即(Ctrl + C)後將立即停止執行。並且如果執行停止,則會引發錯誤。默認情況下,其值為false。
    7. contextName:它包含一個字符串。它是新生成的上下文的可讀名稱。默認情況下是“ VM Context i”,其中,i是所生成的上下文的索引,該索引以數字形式遞增。
    8. contextOrigin:它包含一個字符串。它是與最近生成的上下文等效的來源。此外,原點必須像URL一樣形成。其默認值為“”。
    9. contextCodeGeneration:它是對象類型。
      它具有以下參數:
      • strings:它包含一個布爾值,如果將其設置為false,則對函數構造函數或eval的任何調用都將引發錯誤,即EvalError。其默認值為true。
      • wasm:它擁有一個布爾值。如果將其設置為false,則任何嘗試編譯WebAssembly模塊的嘗試都將引發錯誤,即WebAssembly.CompileError。默認情況下,其值為true。
    10. cachedData:它包含一個Buffer,TypedArray或DataView。在V8的代碼緩存數據的幫助下,它提供了可選的Buffer或TypedArray或DataView以供提供的源使用。之後,可以將cachedDataRejected的值設置為true或false。這取決於V8對數據的接收。
    11. produceCachedData:它擁有一個布爾值。如果其true和cachedData不再可用,則V8嘗試輸出該代碼的代碼緩存數據。如果完成此操作,則會生成一個包含V8代碼緩存數據的緩衝區,然後將其存儲在要返回的vm.Script實例的cachedData中。此外,根據代碼緩存數據,將cachedDataProduced值設置為true或false。但是,不建議使用此選項並使用script.createCachedData()代替。默認情況下,其值為false。
    12. importModuleDynamically:當調用import()方法時,它具有在評估此模塊時調用的函數。並且,如果未指定此選項,則對import()的調用將被拒絕,並出現錯誤。它具有以下參數:
      • specifier:它包含一個字符串。它是傳遞給import()方法的說明符。
      • module:它包含vm.Module。它返回模塊命名空間對象或vm.Module。

返回值:它返回腳本中執行的最後一條語句的結果。

以下示例說明了Node.js中vm.runInNewContext()方法的使用:

範例1:

// Node.js program to demonstrate the      
// vm.runInNewContext() method 
  
// Including util and vm module 
const util = require('util'); 
const vm = require('vm'); 
  
// Creating contextObject 
const obj = { 
  portal:'GeeksforGeeks', 
  authors:30 
}; 
  
// Calling runInNewContext method 
// with its parameters 
vm.runInNewContext('authors *= 3;', obj); 
  
// Displays output 
console.log(obj);

輸出:

{ portal:'GeeksforGeeks', authors:90 }

在這裏,輸出中的作者為90 as(30 * 3 = 90)。

範例2:

// Node.js program to demonstrate the      
// vm.runInNewContext() method 
  
// Including util and vm module 
const util = require('util'); 
const vm = require('vm'); 
  
// Creating contextObject 
const contextobj = {localVar:20}; 
  
// Calling runInNewContext method 
// with its parameters 
var x = vm.runInNewContext('localVar +=(3*3);', 
            contextobj, 2, 'myfile.vm'); 
  
// Displays output 
console.log(contextobj); 
console.log(x);

輸出:

{ localVar:29 }
29

參考: https://nodejs.org/api/vm.html#vm_vm_runinnewcontext_code_contextobject_options




相關用法


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