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


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。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。