2015-11-12 31 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