jspm:导入 jQuery 插件时出错

jspm: Error when importing a jQuery plugin

我正在尝试使用 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 大师可以帮助我? :)

非常感谢...

如果您查看 jQuery.keyboard 的源代码,它在代码中使用了两次 UMD 模式:

曾经在 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 将文件检测为 AMD,但它自己定义了两次而不是一次。

基本上这不是一个有效的 AMD 模块,因此您需要告诉 SystemJS 将其视为全局模块。

这可以通过覆盖来完成:

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

即便如此,以上要求已经加载 jQuery。为此,我们可以在 jQuery 上添加一个 shim 来强制执行依赖关系。

带有 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

如果可行,post 覆盖 jspm registry,然后其他用户也可以受益。