2013-07-17 33 views
1

我想將現有的應用程序轉換爲使用CommonJS模塊並使用Browserify將bundle組合成一個文件。與CommonJS和Browserify的骨幹應用程序

我開始寫模塊,但有一點我有點懷疑,然後纔開始重寫某些位,我該如何優化它,所以我不必包含它Backbone,Underscore,jQuery和每個文件中的任何助手文件,即。

var Backbone = require('/backbone'); 
var $ = require('/jquery'); 
var _ = require('/underscore'); 

在每個文件的頂部會在一段時間後變得乏味。

作爲一個完整的CommonJS,Browserify n00b,我想知道我是否在某處丟失了非常明顯的東西?

+2

我認爲除了被接受的答案之外的另一個顯而易見的事情是,大多數人*做*需要模塊,他們需要。這是需求模式的重要組成部分,恕我直言。也許乏味,但它不僅僅是樣板;它清楚地說明給定模塊依賴於哪些代碼段以及代碼所在的位置,並有助於保持代碼模塊化和獨立性。它儘可能地從經典的PHP地獄通過文件試圖找到你知道來自* somewhere *的神奇函數定義。 – numbers1311407

+0

commonjs模塊的核心原則之一是每個模塊明確地標記它的依賴關係。保存擊鍵,國際海事組織,從來不是一個很好的理由使用全球。 – srquinn

回答

2

你錯過的「非常明顯的事情」是你可以在Node.js和Browserify環境中創建全局變量。要麼通過使用global.Backbone = require('/backbone')明確地執行,要麼通過僅執行Backbone = require('/backbone')(前面沒有var)來明確執行。

請注意,在瀏覽器中,global對象實際上是window對象。但是,附加到window對象意味着您將失去與Node.js的兼容性,因爲它通常沒有定義全局變量window

+0

這就是我所做的。考慮到我們正在使用像Browserify這樣的工具來管理依賴關係,但感覺有點不對,但只要保持良好的組織並限制對全局的依賴,它就很好。 – basicallydan

+2

雖然理論上正確,但我低估了,因爲你不應該鼓勵使用全局來保存擊鍵。這個答案打破了commonjs規範的核心原則之一,即每個模塊都應該明確定義它的依賴關係。 – srquinn