如何将node.js模块/源文件合并成一个.js文件,在节点内执行

我需要在哪里需要在vm.createScript / script.runInNewContext中执行节点应用程序(在沙箱中)的节点代码/模块。 主机节点应用程序在heroku上运行,所以没有本地文件系统可言。 我能够下载并运行没有外部依赖关系的代码,但是要求也能够包含其他节点模块。 (因为构build/包装步骤将是理想的)

有很多现有的解决scheme(browserify是我花费最多时间的),但它们不可避免地会生成一个代码(是的!),意味着在浏览器中执行(boo!)。 例如,Browserify在窗口上生成依赖关系。

有谁知道一个工具,将读取一个package.json依赖关系(或查看源代码中的所有require()),并生成一个单一的blob适合节点的runInNewContext?

我不认为你正在寻找的解决scheme是正确的解决scheme。 基本上你想抓住一堆require('lib') ,把它们runInNewContext一个单一的Javascript上下文,将上下文序列化成源代码,然后把这个序列化的表单传递给runInNewContext函数,以反序列化runInNewContextbuild成一个Javascript上下文,然后反序列化你的自定义沙箱代码,最后运行整个事情。

创build一个包含所需require('lib')的上下文对象并将该对象直接传递给您的虚拟机是不是更有意义? 根据文档中的代码:

 var vm = require('vm'), initSandbox = { async: require('async'), http: require('http') }, context = vm.createContext(initSandbox); vm.runInContext("async.forEach([0, 1, 2], function(element) { console.log(element); });", context); 

现在,您可以通过上下文访问所需的库,而无需经历昂贵的序列化/反序列化过程。