关于javascript:使用require和node.js加载远程js文件

我一直在使用NodeJS和javascript开发在线套接字服务器,并且已经在我的代码中使用require:

创建了"游戏室"。

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

现在..当我在本地计算机上测试代码时,此方法可以找到,但是对于生产服务器,我遇到了问题。似乎出于某种技术原因,运行我的代码的进程与我可以访问(用于文件上载等)的计算机不在同一台计算机上,因此服务器场中的家伙要求我更改我的计算机代码,这样我就可以从全局位置而不是本地加载" forza4.js"中的代码,就像我现在所做的那样。
所以我将代码更改为此:

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

(我当然测试过文件是否存在,请确保当我指向该实际地址时它会显示在浏览器中)
但是我从我的代码中得到了一个错误(再次,在这一点上,我正在我的机器上本地运行此错误),它说:

Exception: Error: Cannot find module 'http://www.xxxxx.com/blabla/forza4.js'

为了安全起见,我这样做了:

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

但是,同样的错误。

从远程服务器向我的代码加载"扩展名"是否会出现问题,还是我只是将" require"调用的格式设置为错误?

感谢一堆!

Yuval。

P.S。
这是此线程的后续操作:
这是较旧且已解决的帖子


看看node.js模块文档

具体来说,请参阅require算法

在node.js内,require调用是同步的,因此无法加载不在文件系统上的文件(例如,从外部URL)。

更新

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

类似

的东西

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

注意:我没有测试此代码

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


"从URL要求" NPM程序包如何?

刚刚找到它-尚未尝试! https://www.npmjs.com/package/require-from-url