I'm trying to import a jQuery plugin (namely https://github.com/Mottie/Keyboard) using jspm/SystemJS.
At first, I installed the module by simply typing the following command:
jspm install github:mottie/keyboard
I then added the line to import the library in my code, just after importing jQuery:
import keyboard from 'mottie/keyboard';
However, when running the code, I encountered the following error:
Uncaught TypeError: Multiple defines for anonymous module
Googling the error didn't provide me with a solution, at least not one that I could understand... I don't know if there are some jspm gurus around here that could help me? :)
Many thanks in advance...
If you look at the source for jQuery.keyboard, it uses a UMD pattern twice in the code:
Once at https://github.com/Mottie/Keyboard/blob/master/js/jquery.keyboard.js#L31, and once at https://github.com/Mottie/Keyboard/blob/master/js/jquery.keyboard.js#L2165.
SystemJS is detecting the file as AMD, but it is defining itself twice instead of once.
Basically as a result this isn't a valid AMD module, so you need to tell SystemJS to treat it as a global instead.
This can be done with an override:
jspm install github:mottie/keyboard -o "{format: 'global'}"
Even then, the above requires that jQuery is already loaded. For this we can add a shim on jQuery to enforce the dependency.
The standard jQuery plugin override with a shim looks like:
override.json
{
"main": "js/jquery.keyboard.js",
"shim": {
"js/jquery.keyboard": {
"deps": ["jquery"]
}
},
"dependencies": {
"jquery": "*"
}
}
We can then install this with:
jspm install github:mottie/keyboard -o override.json
Do post your override to the jspm registry if it works out and then other users can benefit as well.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With