卓别林在主干上找不到jQuery。$(在instanceof check中需要一个函数,但得到了body)

卓别林在主干上找不到jQuery。$(在instanceof check中需要一个函数,但得到了body),jquery,backbone.js,browserify,chaplinjs,Jquery,Backbone.js,Browserify,Chaplinjs,我有一个卓别林/主干项目,我正在用Browserify从RequireJS切换到CommonJS 当我尝试在浏览器中加载应用程序时,我得到了未捕获的TypeError:在instanceof check中需要一个函数,但得到了body。这似乎是因为主干.$未定义 在要求我的应用程序和/或任何卓别林文件之前,我已经做了以下工作: var jQuery = require('jquery'), Backbone = require('backbone'); Backbone.$ = jQu

我有一个卓别林/主干项目,我正在用Browserify从RequireJS切换到CommonJS

当我尝试在浏览器中加载应用程序时,我得到了未捕获的TypeError:在instanceof check中需要一个函数,但得到了body。这似乎是因为主干.$未定义

在要求我的应用程序和/或任何卓别林文件之前,我已经做了以下工作:

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

Backbone.$ = jQuery;

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

问题在于卓别林没有使用与您相同的主干对象。事实上,卓别林需要主干网1.0.0,您需要更大的版本,大概是1.1.2

因此,当您需要“主干”时,您需要1.1.2主干对象,而当卓别林在其上下文中调用require“主干”时,将返回主干1.0.0

这是两个不同的对象,后一个对象将具有主干。$==未定义,无论您对第一个对象做了什么更改

解决方案是使用与卓别林相同的版本:将package.json更改为使用主干1.0.0,并使用npm安装。这将只在节点\模块目录中安装主干。然后,您将需要与卓别林相同的对象


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

卓别林依赖主干网吗?在这种情况下,您可能有两个主干LIB捆绑在一起—一个来自DEP,另一个来自卓别林的DEP。在运行browserify之前尝试执行npm重复数据消除,这将在依赖关系图中消除包的重复数据,并最终得到一个主干库。是的,卓别林依赖于主干。npm重复数据消除不起作用,但您的做法是正确的,卓别林软件包中的主干版本正在使用中,因此手动删除该版本起到了作用。如果npm重复数据消除不适用于您,则卓别林和您都取决于不同的主干版本,否则,npm重复数据消除将删除其中一个主干。我们发现,您必须确保拥有主干。$=在使用require'chaplin'的每个模块中都需要'jquery'。我猜您至少错过了一个,如果该模块碰巧首先运行,它将失败。我会活着找到一种避免这种样板代码的方法,但我只是不知道该怎么做。