2

いくつかの手順を要約して、後で質問します

  1. underscore.jsサードパーティのJavaScriptコンポーネントの開発時にインストールに失敗しました(ここで説明されているように:Underscore.jsとnoconflict)。私のコードには、underscore.jsの異なるバージョンの衝突を避けるために次の行が含まれていました:

    window。$MyUS= _.noConflict();

  2. underscore.jsコードを調べたところ、exportsまたはmodule.exportsが定義されている場合、変数はまた_はのメンバーになることがわかりました。それはちょうど起こった(もちろん、Node.jsではなくブラウザで)。exportsmodule.exports

  3. オブジェクトを脇に保存して、exportsロードする前に削除しunderscore.js、を呼び出した直後に復元しようとしましたnoConflict()。ただし、を呼び出すとdelete exports、が表示されます。これは、削除できないことfalseを意味します。exports

  4. exportsオブジェクト内に2つのメンバー関数が見つかりました:compile()compileToString()。それらの実装を調べることで、おそらくJavascript APILFを参照している参照を見つけました( http://www.livefyre.com/docs/javascript-sdk-referencelivefyre

競合を解決するためのより良い方法はどれですか?次のオプションが表示されます。

  1. underscore.jsコードを変更して、exportsオブジェクトに自分自身をインストールしようとしないようにします。

  2. underscore.jsでオブジェクトを変更し、どのサイトでも問題が発生しないことを期待しますその場合、次のように行exportsを書き直す必要があります。window.$MyUS = _.noConflict();

    window。$MyUS= .noConflict || 輸出。.noConflict()|| ...; //明確にするために健全性チェックは省略されています、明らかに本番コードはより堅牢でなければなりません

さらに情報が必要な場合は、お問い合わせください。

4

1 に答える 1

2

答えは簡単だと思います。GitHub でアンダースコアをexportsフォークし、存在する場合は自分自身を添付することを拒否する簡単なパッチを追加しwindow、プル リクエストを送信します。

そうすれば、すべての人にメリットがあります。アンダースコアのコピーをアップグレードするたびにパッチを再適用する必要がなく、他の人もその問題に対処する必要がありません。

于 2012-07-23T15:58:04.623 に答える