我尝试使用jspm / SystemJS导入jQuery插件(即https://github.com/Mottie/Keyboard)。
首先,我只需输入以下命令即可安装模块:
jspm install github:mottie/keyboard
然后我在我的代码中添加了一行来导入库,就在导入jQuery之后:
import keyboard from 'mottie/keyboard';
但是,在运行代码时,我遇到了以下错误:
Uncaught TypeError: Multiple defines for anonymous module
谷歌搜索错误并没有为我提供解决方案,至少没有一个我能理解的解决方案...... 我不知道这附近是否有一些jspm大师可以帮助我? :)
非常感谢...
答案 0 :(得分: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上添加一个shim来强制执行依赖。
带有垫片的标准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,然后其他用户也可以受益。