我有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实例,尽管情况似乎并非如此。
答案 0 :(得分:0)
问题是Chaplin没有使用与你相同的Backbone对象。事实上,Chaplin需要Backbone 1.0.0而你依赖的是更大的版本(大概是1.1.2)。
因此,当您require('backbone')
时,您需要1.1.2 Backbone对象,而当卓别林在其上下文中调用require('backbone')
时,将返回Backbone 1.0.0。
这是两个不同的对象,后者将有Backbone.$ === undefined
,无论你对第一个做出什么改变。
解决方案是使用与Chaplin相同的版本:将package.json更改为使用Backbone 1.0.0,并使用npm install
。这只会在 node_modules 目录中安装Backbone。然后,您将需要与卓别林相同的对象。
另一种解决方案是迫使Chaplin使用与您相同的版本 - 但这可能会破坏其中的一些组件。只需删除 node_modules / chaplin / node_modules / backbone 目录即可。但是,再次说明,这个修复程序非常糟糕,因为您不应该更改 node_modules 目录下的文件。