2015-11-12 33 views
2

使用卓別林與Browserify和jQuery要求你做到以下幾點:如何避免冗餘骨幹/ jQuery的初始化與卓別林和Browserify

Backbone = require('backbone') 
$ = require('jquery') 
Backbone.$ = $ 
Chaplin = require('chaplin') 

這必須是書面每次require('chaplin')。如果你在任何使用Chaplin的模塊中都會錯過這個模塊,並且如果該模塊被初始化,那麼Chaplin將會被破壞,因爲它會初始化爲不使用jQuery而使用Chaplin,但是後來最終設置Backbone.$jQuery,卓別林並不期待。

這將破壞的一個例子是Chaplin的視圖,它將被初始化爲使用'appendChild'而不是'append'作爲containerMethod。但該元素將是一個沒有appendChild的jQuery選擇器。

有沒有辦法在Browserify中強制執行訂單,以便在使用Chaplin的每個模塊中都不需要此樣板代碼?

回答

3

您可以創建一個模塊來運行您的init步驟並導出Chaplin

// my-chaplin.js 
var Backbone = require('backbone') 
Backbone.$ = require('jquery') 
module.exports = require('chaplin') 

始終需要該模塊,而不是直接要求chaplin

// Each module in your app 
var Chaplin = require('./my-chaplin'); 

CommonJS的保證,這個初始化runs once, no matter how many times you require it

+0

是的,這將工作。我們沒有更新所有模塊,而是指望我們的工程師記住包含my-chaplin,我們決定採用該模塊並強制它成爲Browserify命令行上的第一個模塊。不知道這是否有保證,但它現在正在工作。如果browserify具有操作順序的聲明方式,那將會很好。 – donaddon

+0

我通過瀏覽處理一個需要應用程序其餘部分的單個根文件來管理它。任何預先配置發生在那裏。你能做到這一點,而不是傳遞幾個文件browserify? – joews