jspm:导入jQuery插件时出错

时间:2015-03-19 15:28:11

标签: jquery jspm systemjs

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

非常感谢...

1 个答案:

答案 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,然后其他用户也可以受益。