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, если оно сработает, и тогда другие пользователи также могут получить выгоду.

Другие вопросы по тегам