前言
vm
是 Node.js 顶级模块之一,你可以直接在 Node.js 中使用 require
引入,vm
的功能是可以在 V8 虚拟机的上下文中编译和执行 JavaScript 代码。
The vm module enables compiling and running code within V8 Virtual Machine contexts. ——来自Node.js文档
它比 eval
、Function
更安全,而且同样很简单。
入门
那么我们可以用它来做什么呢?假设你有一段可执行的js代码,最简单的两种方法让它run起来:
- 打开浏览器 console,回车执行。
- 打开一个 terminal,使用 node 来执行它。
这两种都是手动、主动的执行。如果想把这个过程自动化,把目标代码放入到我的程序里呢?方法也有:
eval
Function
vm
下面是 eval 和 Function 实现 runtime 的语法最基本实现,vm 我们会在后面详细介绍:
// eval(string)
console.log(eval('2 + 2'));
// expected output: 4
console.log(eval(new String('2 + 2')));
// expected output: 2 + 2
const sum = new Function('a', 'b', 'return a + b');
console.log(sum(2, 6));
// expected output: 8
我们可以用它们实现一个 javascript 的 runtime 来执行目标代码。比如这样一个场景,我的产品是一个 SDK Playground,我的客户是开发者,它写了一段测试代码想放进我提供的产品里看看运行结果如何,我想要做成一个自动化