2015-03-19 6 views
5

Sto cercando di importare un plug-in jQuery (ovvero https://github.com/Mottie/Keyboard) utilizzando jspm/SystemJS.jspm: Errore durante l'importazione di un plug-in jQuery

In un primo momento, ho installato il modulo, semplicemente digitando il seguente comando:

jspm install github:mottie/keyboard 

Ho poi aggiunto la linea per importare la libreria nel mio codice, subito dopo l'importazione di jQuery:

import keyboard from 'mottie/keyboard'; 

Tuttavia, durante l'esecuzione del codice, ho riscontrato il seguente errore:

Uncaught TypeError: Multiple defines for anonymous module 

Vai osservare l'errore non mi ha fornito una soluzione, almeno non una che potessi capire ... Non so se ci sono alcuni guru di jspm qui intorno che potrebbero aiutarmi? :)

Molte grazie in anticipo ...

risposta

10

Se si guarda alla fonte per jQuery.keyboard, utilizza un modello di UMD due volte nel codice:

Una volta a https://github.com/Mottie/Keyboard/blob/master/js/jquery.keyboard.js#L31, e una volta a https://github.com/Mottie/Keyboard/blob/master/js/jquery.keyboard.js#L2165 .

SystemJS sta rilevando il file come AMD, ma si sta definendo due volte anziché una volta.

Fondamentalmente, come risultato, questo non è un modulo AMD valido, quindi è necessario dire a SystemJS di considerarlo come globale.

Questo può essere fatto con una sostituzione:

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

Anche allora, quanto sopra richiede che jQuery è già caricato. Per questo possiamo aggiungere uno shim su jQuery per rafforzare la dipendenza.

Il plugin di sostituzione standard di jQuery con uno spessore assomiglia:

override.json

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

Possiamo quindi installare questo con:

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

fare pubblicare il tuo sostituzione al jspm registry se funziona e quindi anche altri utenti possono trarne vantaggio.

+0

Grazie Guy, per aver trovato il tempo di scrivere questa risposta illuminante. Mi sembra di avere ancora un altro problema durante il caricamento del modulo ma la tua soluzione ha aiutato a risolvere questo problema. Aggiungerò l'override nel registro non appena avrò scoperto qual è l'ultimo problema. Grazie ancora! – kant312

+0

@guybedford se sto già importando $ da 'bootstrap', ci sarebbe un conflitto se provo a shimare un altro plugin JQuery globale? Come importerei il nuovo plugin nella mia classe ES6? Il nuovo plugin esporta anche "$". – user636525