[英]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 这是此线程的后续: 这是较旧且已解决的帖子
具体参考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.