2015-04-03 98 views
0

我的JavaScript庫需要能夠動態加載可選腳本。我知道有幾種方法可以做到這一點,但我的庫應該在瀏覽器和Node.js中都能正常工作,而且我不想生成多個版本。我也不想重新發明輪子。在瀏覽器和節點中動態加載JavaScript文件

是否有推薦的技術來針對兩個平臺使用相同的代碼?

+0

除非你嘗試了一些東西,否則這對StackOverflow來說不是一個好問題。嘗試http://programmers.stackexchange.com/但是這裏有一個庫,可以讓你在客戶端使用'require'也是http://browserify.org/ – 2015-04-03 17:07:08

+2

@JuanMendes - 這可能會被封閉爲過於寬泛。 – GlenH7 2015-04-03 17:09:24

+0

@JuanMendes我有時會對此感到困惑。我認爲StackOverflow的意義在於創建一個全面的問答數據庫。這對其他人來說似乎是一個有用的問題,所以我在這裏問了它。我目前正在尋找解決方案,並會在我找到問題時回答我自己的問題。 – mhelvens 2015-04-03 17:09:26

回答

0

瀏覽器和node.js以根本不同的方式加載腳本文件。瀏覽器要求您添加腳本標記或使用ajax獲取代碼,然後使用eval()或Function對象對其進行評估。 node.js有require()或者可以使用其他node.js I/O機制獲取代碼,然後對其進行類似評估。

在瀏覽器和node.js中都沒有加載代碼的單一方式。

因此,要編寫一個可以在任一環境中加載代碼的單個函數,您必須檢測您的環境,然後針對該環境使用適當的方法。這不需要您的代碼的兩個版本,只有一個功能根據檢測到的環境進行分支,然後爲該環境執行適當的代碼。

該分支可以背後單一功能(pseduo代碼)被隱藏:

function loadLibrary(name, doneFn) { 
    if (node.js detected) { 
     // fetch the code using node.js I/O 
     // and then evaluate the code 
     // notify caller when the script has finished loading 
    } else { 
     // fetch the code by inserting script tags into the DOM 
     // notify caller when the script has finished loading 
    } 
} 

這將是用於與單件的代碼同時定位平臺一個推薦的方法。