5

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

提前谢谢了...

4

1 回答 1

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 来强制依赖。

使用 shim 覆盖的标准 jQuery 插件看起来像:

覆盖.json

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

然后我们可以安装它:

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

如果成功,请将您的覆盖发布到jspm 注册表,然后其他用户也可以从中受益。

于 2015-03-25T22:07:44.547 回答