如何将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
函数,以反序列化runInNewContext
build成一个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);
现在,您可以通过上下文访问所需的库,而无需经历昂贵的序列化/反序列化过程。
- PassportJS自定义validationcallback未调用
- 在JavaScript中设置ExpressJS中的视图variables
- mongoose寻找function,search不返回所需的结果
- 什么决定使用promises或setTimeout延迟函数的调用顺序?
- 用javascript创buildInstagram-esquefilter?
- Node.js BinaryServer:发送消息到客户端在stream结束?
- 什么是webdriver.Capabilities.firefox()的IE版本?
- 更新/添加基于另一个string的string值
- 有人可以解释一个函数从howtonode包装成语吗?