【问题标题】:How to avoid redundant Backbone / jQuery init with Chaplin and Browserify如何使用 Chaplin 和 Browserify 避免多余的 Backbone / jQuery init
【发布时间】:2015-11-12 16:10:48
【问题描述】:

在 Browserify 和 jQuery 中使用 Chaplin 需要您执行以下操作:

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 的模块中都不需要这个样板代码?

【问题讨论】:

    标签: javascript jquery backbone.js browserify chaplinjs


    【解决方案1】:

    您可以创建一个模块来运行您的初始化步骤并导出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.

    【讨论】:

    • 是的,那行得通。我们没有更新所有模块并指望我们的工程师记住包含 my-chaplin,而是决定采用该模块并强制它成为 Browserify 命令行上的第一个模块。不确定这是否得到保证,但它现在正在工作。如果 browserify 有一种声明式的方式来操作顺序,那就太好了。
    • 我通过让 browserify 处理需要应用程序其余部分的单个根文件来管理它。任何预先配置都在那里发生。您可以这样做而不是将多个文件传递给 browserify 吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-17
    • 2021-04-28
    • 2012-04-24
    相关资源
    最近更新 更多