2015-03-19 4 views
5

Я пытаюсь импортировать плагин jQuery (а именно https://github.com/Mottie/Keyboard) с помощью jspm/SystemJS.jspm: Ошибка при импортировании плагина jQuery

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

jspm install github:mottie/keyboard 

Затем я добавил строку, чтобы импортировать библиотеку в моем коде, только после импорта JQuery:

import keyboard from 'mottie/keyboard'; 

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

Uncaught TypeError: Multiple defines for anonymous module 

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

Большое спасибо заранее ...

ответ

10

Если вы посмотрите на исходный код для 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 плагин переопределение с подкладкой выглядит следующим образом:

override.json

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

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

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

ли опубликовать переопределение к jspm registry если это сработает, и тогда другие пользователи могут также выиграть.

+0

Спасибо, Гай, за то, что нашли время, чтобы написать этот просветляющий ответ. Кажется, у меня еще одна проблема при загрузке модуля, но ваше решение помогло исправить это. Я добавлю переопределение в реестр, как только узнаю, что такое последняя проблема. Еще раз спасибо! – kant312

+0

@guybedford, если я уже делаю импорт $ из 'bootstrap', будет ли конфликт, если я попытаюсь подделать другой глобальный плагин JQuery? Как импортировать новый плагин в мой класс ES6? Новый плагин также экспортирует «$». – user636525