Skip to main content

README

vm 模块提供了一系列 API 用于在 V8 虚拟机环境中编译和运行代码。 JavaScript 代码可以被编译并立即运行,也可以编译、保存然后再运行

同时node文档中提醒:

  • vm模块并不是实现代码安全性的一套机制。 绝不要试图用其运行未经信任的代码.
  • vm模块允许改变一些JavaScript脚本代码的上下文运行环境。但是这些代码仍然是运行在nodejs应用程序的当前进程中。从这个角度来说,vm的功能有些类似于eval函数,但是vm模块提供了一些eval函数所不能实现的特性,也提供了更好的代码管理功能。

引入

使用vm前需要先引入

const vm = require('vm');

使用方法

vm.Script类

  1. 创建script对象

创建一个新的vm.Script对象只编译代码但不会执行它。编译过的vm.Script此后可以被多次执行。 通过vm.Script对象的各种方法来运行这些代码。

const script = new vm.Script(code, options)
  • code 需要被解析的JavaScript代码
  • options配置对象
  1. 使用script对象(runInContext)
script.runInContext(contextifiedSandbox[, options])
  • 在new vm.Script传入字符串创建了一个script对象;
  • 在vm.createContext中传入一个对象创建了一个上下文context;
  • 在script.runInContext中传入上一步创建的这个上下文,执行了script对象。
  • 多次执行,都是在这个context上下文中执行的。

链接

node的vm(虚拟机),改变运行的环境 Node中VM模块详解 vm2实现原理分析