2011-02-01 10 views
20

私はプロジェクトで初めてrequirejsを使用しています。私はすでにJavascriptがたくさんある環境で作業しています。自分のコードを導入するためのきれいな方法を探しています。require jsとjqueryを使用し、グローバルjqueryを壊さないでください。

私が抱えている問題は、ロードできるjQueryのモジュールが既存のjQueryを壊さないことが分かりません。

require-jquery.jsでもjQueryのグローバルバージョンが導入されていることに驚きました。グローバルを導入せずにjQueryをモジュールとしてロードする方法はありますか?

答えて

24

jQueryの1.7を破壊せずにローカルjQueryを拡張できるようにするために.subを使用することができますすることはAMDのロードをサポートしています。しかし、jQueryは独自のモジュール名を「jquery」としてハードコードしているため、この命題はモジュールの命名の競合を避けています。別のモジュールを 'jquery'として定義している場合(requirejsのconfigの 'paths'プロパティで)、この矛盾が発生します。このような「jqueryのローダー」として、モジュールを定義し、あなたのrequirejsのアプリケーションスコープでのjQueryをロードし、あなたはjQueryのをロードしたい場合、「jqueryのローダー」を介してそれを行うには

define(['path/to/jquery.min'], function() { 
    return jQuery.noConflict(true); 
}); 

requirejsをしますnoConflictがjquery-loaderが最初にロードされるときだけ実行されるように、jQueryへの参照を 'キャッシュ'します。

3

複数のバージョンが欲しいを使用しています。 jQueryのハッキングやアップグレードをやめたり、古いバージョンを使用したりしてください。あなたはそれが古いjQuery変数を交換し、グローバルことを破壊しないであろうtrue.noConflictに渡すと

(function($) { 
    // requirejs inclusion block for loading 


}(jQuery.noConflict(true)); 

を試してみてください安全な$を維持するためとして

これは、静かに渡すことができることを意味します。あなたが次にあなたの閉鎖に地元$として1.5のjQueryをグローバル空間に戻って1.2 $ & jQueryを入れて、あなたを与えるだろう上記のコードを使用して

<script src="jquery-1.2"> 
<script src="jquery-1.5"> 

を持っていると言う

再び私が使用してAGAINTS助言しますその複数のバージョンは、右の混乱とメンテナンスの悪夢のためです。あなたが1.5を使用している場合

あなたも、あなたがグローバルjQuery

+1

複数のバージョンに対して良いアドバイスがありますが、パッケージ化されたライブラリにはいくつかのcmsプラグインがあります。私は3 + jQuery/cmsで混合されたプロトタイプバージョンのページを見ました - YUIのバージョン管理アプローチに近いソリューションがあるのだろうかと思います... – mfeineis

+9

複数のバージョンを1つにロードする以外の理由がありますページ。サードパーティのJSアプリケーションを開発している場合、未知の環境で実行されます。消費者のページを壊さずに、私が必要とするバージョンのjQueryを確実に持っている必要があります。 –

+1

@RamenRecon「サードパーティのJSアプリケーションの開発」には、「jQuery」LOLOLOLOLOLOLOLOLOLOLが必要です。 – Raynos

関連する問題