一尘不染

如何从Node.js中的URL要求

node.js

是否有一种标准方法要求节点模块位于某个URL(而不是本地文件系统)上?

就像是:

require('http://example.com/nodejsmodules/myModule.js');

目前,我只是将文件提取到一个临时文件中,并要求这样做。


阅读 236

收藏
2020-07-07

共1个答案

一尘不染

您可以使用http.get方法获取模块,并使用vm模块方法runInThisContextrunInNewContext在沙箱中执行它。

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,在没有其他选择的情况下,在服务器应用程序运行时内部执行远程代码可能是合理的。并且仅当您信任远程服务和之间的网络时。

2020-07-07