2015-03-19 3 views
5

J'essaye d'importer un plugin jQuery (à savoir https://github.com/Mottie/Keyboard) en utilisant jspm/SystemJS.jspm: Erreur lors de l'importation d'un plugin jQuery

Au début, j'ai installé le module en tapant simplement la commande suivante:

jspm install github:mottie/keyboard 

J'ai ensuite ajouté la ligne à importer la bibliothèque dans mon code, juste après l'importation jQuery:

import keyboard from 'mottie/keyboard'; 

Toutefois, lors de l'exécution du code, j'ai rencontré l'erreur suivante:

Uncaught TypeError: Multiple defines for anonymous module 

reluquer l'erreur ne me donnait pas de solution, du moins pas celle que je pouvais comprendre ... Je ne sais pas s'il y a des gourous jspm par ici qui pourraient m'aider? :)

Un grand merci à l'avance ...

Répondre

10

Si vous regardez la source jQuery.keyboard, il utilise un modèle UMD deux fois dans le code:

Une fois à https://github.com/Mottie/Keyboard/blob/master/js/jquery.keyboard.js#L31, et une fois à https://github.com/Mottie/Keyboard/blob/master/js/jquery.keyboard.js#L2165 .

SystemJS détecte le fichier en tant qu'AMD, mais il se définit deux fois au lieu d'une fois.

Par conséquent, il ne s'agit pas d'un module AMD valide, vous devez donc dire à SystemJS de le traiter comme global à la place.

Cela peut être fait avec un remplacement:

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

Même alors, l'exige plus haut que jQuery est déjà chargé. Pour cela, nous pouvons ajouter un shim sur jQuery pour appliquer la dépendance.

Le remplacement du plugin jQuery norme avec une shim ressemble:

override.json

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

On peut alors installer ce avec:

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

Faites publier votre override à la jspm registry Si cela fonctionne, les autres utilisateurs peuvent en bénéficier.

+0

Merci Guy, d'avoir pris le temps d'écrire cette réponse éclairante. Je semble avoir encore un autre problème lors du chargement du module, mais votre solution a aidé à résoudre celui-ci. Je vais ajouter le remplacement dans le registre dès que je découvrirai quel est le dernier numéro. Merci encore! – kant312

+0

@guybedford Si je fais déjà une importation $ à partir de 'bootstrap', y aurait-il un conflit si j'essaye de caler un autre plugin JQuery global? Comment importer le nouveau plugin dans ma classe ES6? Le nouveau plugin exporte également '$'. – user636525