0

我有 Chaplin/Backbone 项目,我正在从 RequireJS 切换到 CommonJS(使用 Browserify)。

当我尝试在浏览器中加载应用程序时,我得到Uncaught TypeError: Expecting a function in instanceof check, but got body. 这似乎是因为Backbone.$未定义。

在需要我的应用程序和/或任何卓别林文件之前,我已经在执行以下操作:

var jQuery = require('jquery'),
    Backbone = require('backbone');

Backbone.$ = jQuery;

所以这应该是加载 jQuery,如果我检查 Backbone.$ 它就在那里。然而,卓别林似乎要么重置Backbone.$为未定义,要么正在使用不同的 Backbone 实例,尽管情况似乎并非如此。

4

1 回答 1

0

问题是卓别林没有使用与您相同的 Backbone 对象。事实上,卓别林需要 Backbone 1.0.0,而您依赖于更高版本(大概是 1.1.2)。

因此,当 you 时require('backbone'),您需要 1.1.2 Backbone 对象,而当 Chaplinrequire('backbone')在其上下文中调用时,返回 Backbone 1.0.0。

这是两个不同的对象,Backbone.$ === undefined无论您对第一个对象进行什么更改,后一个对象都将具有。

一个解决方案是使用与卓别林相同的版本:将 package.json 更改为使用 Backbone 1.0.0,并使用npm install. 这只会在你的node_modules目录中安装 Backbone。然后,您将需要与卓别林相同的对象。

另一种解决方案是强制卓别林使用与您相同的版本 - 但这可能会破坏它的一些组件。只需删除node_modules/chaplin/node_modules/backbone目录。但是,同样,这个修复真的很hacky,因为你不应该更改node_modules目录下的文件。

于 2014-06-22T14:14:42.243 回答