README
vm 模块提供了一系列 API 用于在 V8 虚拟机环境中编译和运行代码。 JavaScript 代码可以被编译并立即运行,也可以编译、保存然后再运行
同时node文档中提醒:
- vm模块并不是实现代码安全性的一套机制。 绝不要试图用其运行未经信任的代码.
- vm模块允许改变一些JavaScript脚本代码的上下文运行环境。但是这些代码仍然是运行在nodejs应用程序的当前进程中。从这个角度来说,vm的功能有些类似于eval函数,但是vm模块提供了一些eval函数所不能实现的特性,也提供了更好的代码管理功能。
引入
使用vm前需要先引入
const vm = require('vm');
使用方法
vm.Script类
- 创建script对象
创建一个新的vm.Script对象只编译代码但不会执行它。编译过的vm.Script此后可以被多次执行。 通过vm.Script对象的各种方法来运行这些代码。
const script = new vm.Script(code, options)
- code 需要被解析的JavaScript代码
- options配置对象
- 使用script对象(runInContext)
script.runInContext(contextifiedSandbox[, options])
- 在new vm.Script传入字符串创建了一个script对象;
- 在vm.createContext中传入一个对象创建了一个上下文context;
- 在script.runInContext中传入上一步创建的这个上下文,执行了script对象。
- 多次执行,都是在这个context上下文中执行的。