jspm:导入jQuery插件时出错

kan*_*312 5 jquery systemjs jspm

我正在尝试使用jspm/SystemJS 导入jQuery插件(即https://github.com/Mottie/Keyboard).

首先,我只需输入以下命令即可安装模块:

jspm install github:mottie/keyboard
Run Code Online (Sandbox Code Playgroud)

我在导入jQuery之后添加了在我的代码中导入库的行:

import keyboard from 'mottie/keyboard';
Run Code Online (Sandbox Code Playgroud)

但是,在运行代码时,我遇到以下错误:

Uncaught TypeError: Multiple defines for anonymous module
Run Code Online (Sandbox Code Playgroud)

谷歌搜索错误没有给我一个解决方案,至少没有一个我能理解的...我不知道这里是否有一些jspm大师可以帮助我?:)

提前谢谢了...

guy*_*ord 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'}"
Run Code Online (Sandbox Code Playgroud)

即使这样,上面要求jQuery已经加载.为此,我们可以在jQuery上添加一个shim来强制执行依赖项.

带有垫片的标准jQuery插件覆盖如下:

override.json

{
  "main": "js/jquery.keyboard.js",
  "shim": {
    "js/jquery.keyboard": {
      "deps": ["jquery"]
    }
  },
  "dependencies": {
    "jquery": "*"
  }
}
Run Code Online (Sandbox Code Playgroud)

然后我们可以安装:

jspm install github:mottie/keyboard -o override.json
Run Code Online (Sandbox Code Playgroud)

如果运行完毕,请将覆盖发布到jspm注册表,然后其他用户也可以受益.