簡體   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