我試圖通過使用browserify-shim將某些模塊從包中提取出來來重構使用Browserify的庫。具體來說,該庫使用require(「codemirror」),但我想提供一個不包含CodeMirror的軟件包,而是使用通過CDN提供的軟件包。用browserify-shim實現依賴關係的勻場依賴關係
所以我有browserify-墊片配置在我的package.json像
"browserify-shim": {
"jquery": "global:jQuery",
"codemirror": "global:CodeMirror"
}
到目前爲止好。 require('jquery')和require('codemirror')已從browserified bundle中消失,並被預期的代碼片段取代,以從窗口對象中獲取jQuery和CodeMirror。
該庫還需要一些CodeMirror附加組件。例如require('codemirror/addon/hint/show-hint.js')。沒關係。我希望將附加軟件捆綁在一起。但是,在這個附加組件中是一個包含require(「../../ lib/codemirror」)的UMD包裝器。由於這個(我認爲),Browserify看到了這個並且綁定了來自/node_modules/codemirror/lib/codemirror.js的CodeMirror。我想這樣使用代碼鏡像墊片中定義的window.CodeMirror,而不是找出它。已經嘗試了許多變化,包括以下內容:
"browserify-shim": {
"jquery": "global:jQuery",
"codemirror": "global:CodeMirror",
"../../lib/codemirror": "global:CodeMirror",
"codemirror/addon/hint/show-hint.js": {
"exports":null,
"depends":["../../lib/codemirror:CodeMirror"]
}
}
這需要( 「../../ LIB/codemirror」)不會消失!我確定我錯過了一些東西。
我從一個Gulp腳本運行這個,但我不認爲這應該有所作爲。 Browserify版本3.38.1。 Browserify-shim版本3.7.0。
任何想法?
看起來像browserify-shim可能是錯誤的方式去與此。 Browserify選項bundleExternal = false可能會解決問題。調查...... – 2014-10-09 12:06:46
bundleExternal = false並不是完整的答案,因爲它留下了最初的「require」語句。因此,第一個示例中的browserify-shim仍然是需要的。但它有幫助。通過這個設置,我可以在綁定Gulp腳本以獲取附加組件之前直接.require('codemirror/addon/hint/show-hint.js'),但CodeMirror的外部需求將會被忽略。 – 2014-10-13 14:57:00
在browserify的最新版本中看起來像是將{global:true}應用於browserify-shim轉換,這會導致它在依賴項上運行!這允許我們成功地填充require('../../ lib/codemirror')。 – 2014-10-15 18:34:12