可以說我正在編寫一個JavaScript模塊,可以在瀏覽器和服務器(使用節點)上使用。讓我們叫它模塊。並且可以說,模塊將受益於另一個模塊中的方法,稱爲依賴。這兩個模塊的已寫入瀏覽器和服務器都可以使用,點菜CommonJS的風格:打包瀏覽器/服務器CommonJS模塊與依賴
module.js
if (typeof module !== 'undefined' && module.exports)
module.exports = Module; /* server */
else
this.Module = Module; /* browser */
dependancy.js
if (typeof module !== 'undefined' && module.exports)
module.exports = Dependancy; /* server */
else
this.Dependancy = Dependancy; /* browser */
很明顯,依賴可以直接在瀏覽器中使用。但是,如果模塊包含var dependancy = require('dependency');
指令,則更容易「維護」模塊。
我知道我可以模塊內爲執行全局檢查扶養,像這樣:
var dependancy = this.Dependancy || require('dependancy');
但是,這意味着我的模塊有瀏覽器安裝兩個添加的要求:
- 用戶必須包含dependency.js文件作爲
<script>
我ñ他們的文檔 - ,用戶必須做出之前module.js
添加這兩個要求,確保該腳本加載拋出像CommonJS的一個隨和的模塊化架構的想法。
對我來說,另一種選擇是,我包括第二,編譯腳本在我模塊包使用browserify捆綁dependency.js
。然後,我指示在瀏覽器中使用該腳本的用戶包含此腳本,而服務器端用戶使用package.json
中列出的未捆綁的條目腳本。這比第一種方式更可取,但它需要預編譯過程,我每次更改庫時都必須運行(例如,在上傳到GitHub之前)。
有沒有其他的方式來做到這一點,我沒有想到?
這是一個可怕的想法,服務器和瀏覽器出於安全原因不應該共享相同的庫,這就是爲什麼我們首先需要這兩者。想象一下,你的一個依賴會暴露你的用戶的電子郵件或密碼或類似的東西。這將是災難性的。 – Val
@Val在服務器端和瀏覽器端都可以使用很多通用的庫,這些庫不涉及安全性。例如,[異步](https://github.com/caolan/async)庫。此外,在這種情況下,** Module **和** Dependency **都是由我自己編寫的。 – shennan