2014-01-20 6 views
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, хотя это, похоже, не так.

+1

Зависит ли Чаплин от магистрали? Возможно, у вас есть две Backbone libs в пакете - одна из ваших депок и одна из детектив Чаплина. Попробуйте выполнить 'npm dedupe' перед запуском браузера, который будет дедуплировать пакеты в графике зависимостей и в итоге будет иметь одну Backbone lib. – andreypopp

+0

Да, Чаплин зависит от магистрали. 'npm dedupe' не работал, но вы были на правильном пути, использовалась версия Backbone в пакете Chaplin, поэтому вручную удаляли эту трюк. – evilcelery

+0

, если 'npm dedupe' не работает для вас, то и Chaplin, и вы зависите от разных версий Backbone, иначе' npm dedupe' удалит одну из Backbone. – andreypopp

ответ

0

Проблема в том, что Chaplin не использует тот же объект Backbone, что и ваш. Действительно, Чаплин требует Backbone 1.0.0, и вы полагаетесь на большую версию (предположительно 1.1.2).

Таким образом, когда вы используете require('backbone'), вам требуется 1.1.2 Магистральный объект, тогда как, когда Chaplin вызывает require('backbone') в своем контексте, возвращается Backbone 1.0.0.

Это два разных объекта, а у более позднего - Backbone.$ === undefined, любые изменения, которые вы делаете в первую очередь.

Решение должно использовать ту же версию, что и Chaplin: измените свой пакет.json на использование Backbone 1.0.0 и используйте npm install. Это позволит установить только базовую станцию ​​в каталог node_modules. Тогда вам понадобится тот же объект, что и Чаплин.

Другое решение - заставить Чаплина использовать ту же версию, что и ваша, но это может сломать некоторые ее компоненты. Просто удалите каталог node_modules/chaplin/node_modules/backbone. Но, опять же, это исправление действительно хакерское, поскольку вы не должны изменять файлы в каталоге node_modules.

 Смежные вопросы

  • Нет связанных вопросов^_^