node.js:如何从另一台服务器包含外部.js?

时间:2015-10-25 21:26:29

标签: javascript node.js

我正在尝试将位于另一台服务器上的.js文件包含到我的node.js程序中。这可能吗?

我无法使用require('./local_file.js')并通过互联网获取内容:require('http://www.server.com/path/file.js');

我曾尝试制作一个http.request,然后使用eval(),但范围完全错误,外部文件中的函数仍未定义:

var source_string = load_contents_via_http('http://www.server.com/folder/file.js');
var source_string += '\n run_my_function();';
eval(source_string);

有人有任何建议吗?

编辑(解决方案): 我解决了我的问题,将重要的部分重新打包到我的本地服务器上运行的脚本中,如@zackehh所述。然后我使用http.request在需要时从远程服务器加载和评估特定部分。由于最重要的代码在本地服务器上运行,导入的额外代码更容易添加。

以下是我如何解决问题的示例:

var EssentialObject = {};
EssentialObject.ServerFunctions = {};
EssentialObject.ServerFunctions.Init = function (){
  var external_code = load_contents_via_http('http://www.server.com/file.js');
  var eval_this = external_code.substr(
    external_code.indexOf('EssentialObject.Addons = {}'),
    external_code.indexOf('// End of EssentialObject.Addons')-external_code.indexOf('EssentialObject.Addons = {}')
  );
  eval ( eval_this );
  eval ( "EssentialObject.Addons.test=true; console.log('Eval Done')" ); // Check if it works
};

1 个答案:

答案 0 :(得分:0)

免责声明:从技术上讲,这不是问题的答案,我觉得它应该被归类为一个,因为它朝着解决问题的方向发展。

可以用简单的http request来做,但我不推荐它。你最好在npm模块中的两台服务器上重新打包你需要的东西并要求它们。这可以让你轻松地分享你的代码。如果您不想公开您的代码,npm也会有新的private module选项。