jspm: ошибка при импорте плагина jQuery

Я пытаюсь импортировать подключаемый модуль jQuery (а именно https://github.com/Mottie/Keyboard) используя jspm/SystemJS.

Сначала я установил модуль, просто набрав следующую команду:

jspm install github:mottie/keyboard

Затем я добавил строку для импорта библиотеки в свой код сразу после импорта jQuery:

import keyboard from 'mottie/keyboard';

Однако при запуске кода я столкнулся со следующей ошибкой:

Uncaught TypeError: Multiple defines for anonymous module

Поиск ошибки в Google не дал мне решения, по крайней мере, такого, которое я мог бы понять ... Я не знаю, есть ли здесь какие-нибудь гуру jspm, которые могли бы мне помочь? :)

Спасибо заранее...


person kant312    schedule 19.03.2015    source источник


Ответы (1)


Если вы посмотрите на источник jQuery.keyboard, он дважды использует шаблон UMD в коде:

Однажды на https://github.com/Mottie/Keyboard/blob/master/js/jquery.keyboard.js#L31 и один раз на https://github.com/Mottie/Keyboard/blob/master/js/jquery.keyboard.js#L2165.

SystemJS определяет файл как AMD, но определяет себя дважды, а не один раз.

По сути, в результате это недопустимый модуль AMD, поэтому вам нужно указать SystemJS, чтобы он рассматривал его как глобальный.

Это можно сделать с помощью переопределения:

jspm install github:mottie/keyboard -o "{format: 'global'}"

Даже в этом случае вышеизложенное требует, чтобы jQuery уже был загружен. Для этого мы можем добавить прокладку на jQuery, чтобы обеспечить зависимость.

Стандартное переопределение плагина jQuery с прокладкой выглядит так:

переопределить.json

{
  "main": "js/jquery.keyboard.js",
  "shim": {
    "js/jquery.keyboard": {
      "deps": ["jquery"]
    }
  },
  "dependencies": {
    "jquery": "*"
  }
}

Затем мы можем установить это с помощью:

jspm install github:mottie/keyboard -o override.json

Опубликуйте свое переопределение в реестре jspm, если оно сработает, и тогда другие пользователи также смогут получить пользу.

person guybedford    schedule 25.03.2015
comment
Спасибо, Гай, за то, что нашли время написать этот поучительный ответ. Кажется, у меня все еще есть другая проблема при загрузке модуля, но ваше решение помогло исправить эту. Я добавлю переопределение в реестр, как только узнаю, в чем заключается последняя проблема. Еще раз спасибо! - person kant312; 27.03.2015
comment
@guybedford, если я уже делаю импорт $ из 'bootstrap', возникнет ли конфликт, если я попытаюсь подключить другой глобальный плагин JQuery? Как мне импортировать новый плагин в мой класс ES6? Новый плагин также экспортирует «$». - person user636525; 21.02.2016