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
Погугление с ошибкой не дало мне решения, по крайней мере, не того, которое я мог бы понять... Я не знаю, есть ли здесь гуру jspm, которые могли бы мне помочь?:)
Спасибо заранее...
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 уже был загружен. Для этого мы можем добавить shim на jQuery для обеспечения зависимости.
Стандартное переопределение плагина jQuery с помощью прокладки выглядит следующим образом:
override.json
{
"main": "js/jquery.keyboard.js",
"shim": {
"js/jquery.keyboard": {
"deps": ["jquery"]
}
},
"dependencies": {
"jquery": "*"
}
}
Затем мы можем установить это с:
jspm install github:mottie/keyboard -o override.json
Опубликуйте переопределение в реестре jspm, если оно сработает, и тогда другие пользователи также могут получить выгоду.