Browserify讓你利用節點的世界,並捆綁起來交付給瀏覽器。它理解Node模塊,它通過CommonJS require
語句定義依賴關係。
但是如果你有沒有定義爲節點模塊和不支持CommonJS的一些JS代碼或庫?輸入browserify-shim。它提供了圍繞任何腳本的填充程序包裝器,如您的私有第三方腳本,以便它可以被定義爲並用作Browserify可以理解的Node模塊。
使用browserify-shim完全正交於如何您執行Browserify。基本上有兩種選擇:A)使用Browserify's command line API或B)使用Browserify's JS API。
使用的構建工具,像Gulp,意味着第二個選項,因爲你會使用Browserify的JS API在咕嘟咕嘟構建腳本(即gulpfile.js)。很多人更喜歡使用Gulp,因爲它擁有一個良好的插件生態系統,可以讓你做更多的事情,而不僅僅是調用Browserify(例如,編譯CoffeeScript,編譯SASS,運行JSHint等)。
因此,要回答你的具體問題:
Browserify,墊片,如果你有JS代碼不寫成一個節點/ CommonJS的模塊,你需要通過Browserify捆綁時,才需要。爲此,您需要告訴browserify-shim在package.json中將哪些文件填充爲模塊(以及它們具有哪些依賴關係)。請注意,這與Gulp完全無關;所以無論您是否使用Gulp,您都需要它。
你描述的是browserify-shim的完美用例。將第三方腳本放入您的項目中,將這些文件配置爲包中的模塊。json per b-shim的文檔,require
他們在您的代碼中,並執行Browserify將它們與您的代碼捆綁在一起。你也可以把它們分開捆綁,放在自己的項目中,等等 - 但是你想要構造它。
幾件事情要注意:
- 您可以勻幾乎所有的JS庫這種方式。
- 將JS庫改爲Node模塊將全局範圍改爲私有範圍。希望庫中的所有內容都是命名空間,以便其所有功能都可以作爲單個模塊導出,但如果不是這樣,則可能需要修改shimmed代碼以明確附加
window
(這很容易但不推薦)或拆分代碼分成不同的文件/模塊。
- Browserify和Gulp都使用JS API中的流,但Browserify使用本地節點流,而Gulp使用Vinyl流。由於它們不能很好地協同工作,因此您可能必須使用vinyl-source-stream來將Gulp調整爲Browserify(例如,用於重命名Browserify管道中的文件),或者使用vinyl-transform來將Browserify調整爲Gulp(例如,包裝一個Browserify流以用於一個Gulp管道)。
優秀的答案。謝謝你,先生!一個小問題。爲什麼有人會使用b-shim,比如說jQuery,當我可以安裝jquery時,需要它並將其分配給全局$變量。我已經看到兩種方法正在使用。這是一種個人喜好,還是工具的進化使它有可能沒有墊片? – sat 2014-09-28 20:31:18
更多後者。我認爲jQuery在2.x之前不是CommonJS兼容的。所以如果可以的話,一定要使用CommonJS庫/模塊;否則使用b-shim。祝你好運! – superEb 2014-09-28 22:32:24