【发布时间】:2014-02-09 14:24:20
【问题描述】:
我有 Chaplin/Backbone 项目,我正在从 RequireJS 切换到 CommonJS(使用 Browserify)。
当我尝试在浏览器中加载应用程序时,我得到Uncaught TypeError: Expecting a function in instanceof check, but got body。这似乎是因为 Backbone.$ 未定义。
在需要我的应用和/或任何 Chaplin 文件之前,我已经在执行以下操作:
var jQuery = require('jquery'),
Backbone = require('backbone');
Backbone.$ = jQuery;
所以这应该是加载 jQuery,如果我检查 Backbone.$,它就在那里。然而,卓别林似乎要么将 Backbone.$ 重置为未定义,要么正在使用不同的 Backbone 实例,尽管情况似乎并非如此。
【问题讨论】:
-
卓别林是否依赖 Backbone?可能存在捆绑中包含两个 Backbone 库的情况——一个来自您的部门,一个来自卓别林的部门。尝试在运行 browserify 之前执行
npm dedupe,这将在依赖图中对包进行重复数据删除,并最终得到一个 Backbone 库。 -
是的,卓别林依赖于 Backbone。
npm dedupe没有用,但是你在正确的轨道上,正在使用 Chaplin 包中的 Backbone 版本,所以手动删除就可以了。 -
如果
npm dedupe对您不起作用,那么卓别林和您都依赖于不同版本的 Backbone,否则npm dedupe将删除其中一个 Backbone。 -
我们发现,您必须确保在使用 require('chaplin') 的每个模块中都有 Backbone.$ = require('jquery')。我猜你至少错过了一个,如果该模块恰好首先运行,它将失败。我会找到一种方法来避免这种样板代码,但我只是不知道如何。
标签: jquery backbone.js browserify chaplinjs