0
我的JavaScript庫需要能夠動態加載可選腳本。我知道有幾種方法可以做到這一點,但我的庫應該在瀏覽器和Node.js中都能正常工作,而且我不想生成多個版本。我也不想重新發明輪子。在瀏覽器和節點中動態加載JavaScript文件
是否有推薦的技術來針對兩個平臺使用相同的代碼?
我的JavaScript庫需要能夠動態加載可選腳本。我知道有幾種方法可以做到這一點,但我的庫應該在瀏覽器和Node.js中都能正常工作,而且我不想生成多個版本。我也不想重新發明輪子。在瀏覽器和節點中動態加載JavaScript文件
是否有推薦的技術來針對兩個平臺使用相同的代碼?
瀏覽器和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
}
}
這將是用於與單件的代碼同時定位平臺一個推薦的方法。
除非你嘗試了一些東西,否則這對StackOverflow來說不是一個好問題。嘗試http://programmers.stackexchange.com/但是這裏有一個庫,可以讓你在客戶端使用'require'也是http://browserify.org/ – 2015-04-03 17:07:08
@JuanMendes - 這可能會被封閉爲過於寬泛。 – GlenH7 2015-04-03 17:09:24
@JuanMendes我有時會對此感到困惑。我認爲StackOverflow的意義在於創建一個全面的問答數據庫。這對其他人來說似乎是一個有用的問題,所以我在這裏問了它。我目前正在尋找解決方案,並會在我找到問題時回答我自己的問題。 – mhelvens 2015-04-03 17:09:26