Чаплин не может найти jQuery на Backbone. $ (Ожидал функцию в экземпляре проверки, но получил тело)

0

У меня есть проект Chaplin/Backbone, который я перехожу из RequireJS в CommonJS (с Browserify).

Когда я пытаюсь загрузить приложение в браузере, я получаю Uncaught TypeError: Expecting a function in instanceof check, but got body. Кажется, это связано с тем, что Backbone.$ Undefined.

Я уже делаю следующее, прежде чем требовать свое приложение и/или любые файлы Chaplin:

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

Backbone.$ = jQuery;

Таким образом, это должно быть загрузка jQuery, и если я проверю Backbone. $ Он есть. Однако Чаплин, похоже, либо перезагружает Backbone.$ To undefined, либо использует другой экземпляр Backbone, хотя это, похоже, не так.

  • 1
    Зависит ли Чаплин от Магистра? Может случиться так, что у вас есть две библиотеки Backbone в пачке - одна из ваших deps и одна из deps Чаплина. Попробуйте выполнить npm dedupe перед запуском browserify, что приведет к дедупликации пакетов в графе зависимостей и приведет к созданию одной библиотеки Backbone.
  • 0
    Да, Чаплин зависит от Магистра. npm dedupe не работал, но вы были на правильном пути, использовалась версия Backbone в пакете Chaplin, поэтому удаление вручную помогло.
Показать ещё 2 комментария
Теги:
browserify
backbone.js
chaplinjs

1 ответ

0

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

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

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

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

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню