繁体   English   中英

使用带有 node.js 的 require 加载远程 js 文件

[英]Loading remote js file using require with node.js

我一直在使用 NodeJS 和 javascript 开发在线套接字服务器,并且我一直在使用 require 在我的代码中创建“游戏室”:

new_game_obj = require('./forza4.js');

现在..当我在本地机器上测试我的代码时,这可以找到,但是对于生产服务器,我遇到了一个问题。 似乎出于某种技术原因,运行我的代码的进程在另一台机器上,然后我可以访问(用于文件上传等),所以服务器场上的人要求我更改我的代码,以便我将从全局位置而不是本地位置加载“forza4.js”中的代码,就像我现在所做的那样。 所以我把代码改成这样:

new_game_obj = require('http://www.xxxxx.com/blabla/forza4.js');

(当然,我测试了文件是否存在,只是为了确定,当我指向该实际地址时,它会显示在浏览器中)但是我的代码出现错误(同样,此时,我正在运行这在我的机器上本地),它说:

异常:错误:找不到模块“ http://www.xxxxx.com/blabla/forza4.js

所以为了安全起见,我做了:

new_game_obj = require('http://92.xx.xx.xx/blabla/forza4.js'); 

但是,同样的错误。

从远程服务器向我的代码加载“扩展”是否应该出现问题,或者我只是格式化“require”调用错误?

谢谢一堆!

尤瓦尔。

PS 这是此线程的后续: 这是较旧且已解决的帖子

查看 node.js模块文档

具体参考require算法

在 node.js 中, require调用是同步的,因此无法加载不在您的文件系统上的文件(即,来自外部 url)。

更新

您可以通过http 请求获取代码 - 或者更好的是,通过https 请求获取代码并使用内置vm模块运行它 - 甚至使用eval ,但这似乎不是一个好主意 - 正如这个老问题所建议的那样。

就像是

https.get( 'https://www.xxxxx.com/blabla/forza4.js', function( res ){
  res.on( 'data', function( data ){
    vm.runInThisContext( data, 'remote/forza4.js' );
  });
});

注意:我没有测试这段代码

当然这不是最好的解决方案,但它是一个解决方案。

'require from URL' NPM 包怎么样?

刚刚找到它 - 还没有尝试过! https://www.npmjs.com/package/require-from-url

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM