是否有一种标准方法要求节点模块位于某个URL(而不是本地文件系统)上?
就像是:
require('http://example.com/nodejsmodules/myModule.js');
目前,我只是将文件提取到一个临时文件中,并要求这样做。
您可以使用http.get方法获取模块,并使用vm模块方法runInThisContext和runInNewContext在沙箱中执行它。
例
var http = require('http') , vm = require('vm') , concat = require('concat-stream'); // this is just a helper to receive the // http payload in a single callback // see https://www.npmjs.com/package/concat-stream http.get({ host: 'example.com', port: 80, path: '/hello.js' }, function(res) { res.setEncoding('utf8'); res.pipe(concat({ encoding: 'string' }, function(remoteSrc) { vm.runInThisContext(remoteSrc, 'remote_modules/hello.js'); })); });
IMO,在没有其他选择的情况下,在服务器应用程序运行时内部执行远程代码可能是合理的。并且仅当您信任远程服务和之间的网络时。