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

エラーをグーグルで検索しても、解決策は得られませんでした。少なくとも、私が理解できるものではありませんでした。:)

よろしくお願いします...

4

1 に答える 1

10

jQuery.keyboard のソースを見ると、コード内で UMD パターンが 2 回使用されています。

https://github.com/Mottie/Keyboard/blob/master/js/jquery.keyboard.js#L31で1 回、およびhttps://github.com/Mottie/Keyboard/blob/master/js/jqueryで 1 回.keyboard.js#L2165 .

SystemJS はファイルを AMD として検出していますが、それ自体を 1 回ではなく 2 回定義しています。

基本的に、これは有効な 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

オーバーライドがうまくいった場合は、オーバーライドをjspm レジストリに投稿してください。そうすれば、他のユーザーも同様に恩恵を受けることができます。

于 2015-03-25T22:07:44.547 に答える