原文链接: nodejs 沙箱环境 vm
上一篇: lerna 代码管理模式
文档
vm2 一个类似的第三方库
https://github.com/patriksimek/vm2
在一些系统中,我们希望给用户提供插入自定义逻辑的能力,除了 RPC
和 REST
之外,运行客户提供的代码也是比较常用的方法,好处是可以极大地减少在网络上的耗时。JavaScript 是一种非常流行而且容易上手的语言,因此,让用户用 JavaScript 来写自定义逻辑是一个不错的选择。下面我们介绍 Node.js 提供的 vm 模块以及分析用它来运行不信任代码可能遇到的问题。
vm 模块
vm 模块是 Node.js 内置的核心模块,它能让我们编译 JavaScript 代码和在指定的环境中运行。请看下面例子:
const util = require('util');
const vm = require('vm');
// 1. 创建一个 vm.Script 实例, 编译要执行的代码
const script = new vm.Script('globalVar += 1; anotherGlobalVar = 1; ');
// 2. 用于绑定到 context 的对象
const sandbox = {globalVar: 1};
// 3. 创建一个 context, 并且把 sandbox 这个对象绑定到这个环境, 作为全局对象
const contextifiedSandbox = vm.createContext(sandbo