2015-03-19 19 views
5

Próbuję zaimportować wtyczkę jQuery (mianowicie https://github.com/Mottie/Keyboard) za pomocą komendy jspm/SystemJS.jspm: Błąd podczas importowania wtyczki jQuery

Początkowo po zainstalowaniu modułu po prostu wpisując następujące polecenie:

jspm install github:mottie/keyboard 

I dodaje linię do importowania biblioteki w moim kodu, tuż po imporcie jQuery:

import keyboard from 'mottie/keyboard'; 

Jednak po uruchomieniu kodu wystąpił następujący błąd:

Uncaught TypeError: Multiple defines for anonymous module 

Przejdź ogling błędu nie dostarczył mi rozwiązania, a przynajmniej nie takiego, który mógłbym zrozumieć ... Nie wiem, czy są tu jacyś guru jspm, którzy mogliby mi pomóc? :)

Wiele z góry dzięki ...

Odpowiedz

10

Jeśli spojrzeć na źródło jQuery.keyboard, wykorzystuje wzór UMD dwa razy w kodzie:

Raz na https://github.com/Mottie/Keyboard/blob/master/js/jquery.keyboard.js#L31, a raz na https://github.com/Mottie/Keyboard/blob/master/js/jquery.keyboard.js#L2165 .

SystemJS wykrywa plik jako AMD, ale definiuje się dwa razy zamiast raz.

Zasadniczo nie jest to prawidłowy moduł AMD, dlatego należy powiedzieć systemowi SystemJS, aby traktował go jako globalny.

Można to zrobić za pomocą ręcznego:

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

Nawet wtedy, powyżej wymaga jQuery jest już załadowany. W tym celu możemy dodać podkładkę do jQuery, aby wymusić zależność.

Standardowa plugin jQuery przesłanianie z podkładką wygląda następująco:

override.json

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

Możemy wtedy zainstalować ten z:

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

Czy wysłać nadpisywane jspm registry jeśli to się uda, a inni użytkownicy również mogą skorzystać.

+0

Dziękuję Guy, za poświęcenie czasu na napisanie tej oświecającej odpowiedzi. Podczas ładowania modułu nadal mam inny problem, ale rozwiązanie to pomogło naprawić ten. Dodam nadpisanie w rejestrze, gdy tylko dowiem się, jaki jest ostatni problem. Jeszcze raz dziękuję! – kant312

+0

@guybedford, jeśli już robię import $ from 'bootstrap', czy wystąpiłby konflikt, jeśli spróbuję zastąpić inną globalną wtyczkę JQuery? Jak zaimportować nową wtyczkę do mojej klasy ES6? Nowa wtyczka eksportuje również "$". – user636525

Powiązane problemy