考虑以下代码:
vm = require('vm');
context = vm.createContext({});
vm.runInContext("Buffer.from('abc').toString()", context);
ReferenceError: Buffer is not defined
请注意,由于 Buffer 是 Node.js 已添加为Node Specific Global Object的特定于 Node.js 的构造,因此这会产生。 (请注意,其他 JS 全局变量喜欢Math
并且Array
不共享此问题。) 可以通过将上述代码修改为来解决此特定问题
vm = require('vm');
context = vm.createContext({Buffer});
vm.runInContext("Buffer.from('abc').toString()", context);
但是,如果我希望导入每个特定于节点的全局全局变量,那么似乎我必须一一列出它们。鉴于 Node.js 相对频繁地添加全局对象,有没有办法可以将所有 Node.JS 的全局对象传递给 vm 上下文?或者,是否有一种编程方式来构建所有 Node Globals 的列表?
注意:global
不同节点版本的使用不一致:例如Buffer
适用于global
节点 v8 和 v10,但不适用于 v12。