26

クライアントの依存関係を解決するために、JSPM を使用して NPM から backbone.marionette をインストールしようとしています。コマンドプロンプトで次のコマンドを使用した簡単な操作:

jspm install marionette=npm:backbone.marionette

jquery を除くすべての依存関係が自動的にダウンロードおよびインストールされます。しかし、実行時エラーが発生します:

未定義の Deferred を呼び出すことはできません。

コードを調べていたところ、バックボーン ソース コードの 9、10、11 行目に問題があることがわかりました。

} else if (typeof exports !== 'undefined') {
  var _ = require("underscore");
  factory(root, exports, _);

の下traceurJSで実行すると、factory-methodがここから呼び出され、最後の引数 が省略されていることは明らか$です。github でバックボーンのソースコードを見ると、同じ行が次のようになっています。

} else if (typeof exports !== 'undefined') {
var _ = require('underscore'), $;
try { $ = require('jquery'); } catch(e) {}
factory(root, exports, _, $);

ここでは、jquery の依存関係がオプション (try/catch) で追加されています。ここで、NPM のバージョンが GitHub と同じバージョン - 1.1.2 でマークされていることを追加する必要があります。

違いはなぜですか? これはしばらくの間問題であったようですが、これをコードに追加するなどのいくつかの回避策が公開されています。

$           = require('jquery');
Backbone    = require('backbone');
Backbone.$  = $

回避策であり、「存在しない」ように見えるため、機能しますが、これは好きではありません。

4

0 に答える 0