一部の JavaScript ライブラリは、すべての依存ライブラリを含む、完全に連結されたファイルとして配布されます。JQuery などの一部のライブラリは、ライブラリの複数のバージョンが使用されている場合に競合を処理する方法を提供します。しかし、コンパイル/連結された JavaScript ファイルに競合を処理する方法が組み込まれていないライブラリが含まれていて、同じライブラリ (ただし異なるバージョン) を使用している場合、使用しているバージョンをラップする一般的な方法はありますか?それにカスタム名前空間を追加しますか? それとも、使用されているライブラリに依存していますか?
質問する
213 次
1 に答える
2
ライブラリによって異なります。すべての関数を 1 つの名前空間で提供する場合は、最初にバージョンを含め、それへの参照を別の変数/名前で保存し (競合が発生する可能性がある場合は元の設定を解除)、後で他のライブラリを含めることができます。
次のようになります。
<script src="MyLibraryV1.js"></script>
<script>
// Assuming all functions are available under `$`
var MyLibraryV1 = $;
// Now the next script can overwrite `$`.
// Optionally we can also delete/undefine this symbol:
delete window.$;
</script>
<script src="OtherLibraryWithDependencies.js"></script>
<script>
// For easy access, you can use an immediate function to still let `$`
// refer to your library version. It should not affect the other code
// (but if it does you obviously have to use the other name)
(function($) {
// put all code that needs `MyLibraryV1` here
}(MyLibraryV1));
</script>
もちろん、より良いことは、OtherLibraryWithDependencies
すべての依存関係を適切にカプセル化して、グローバルスコープに漏れないようにすることです。
于 2013-01-14T23:33:08.810 に答える