グローバルなjQueryを侵入することなく、requirejsとjqueryを使用しますか?
質問
プロジェクトで初めてrequirejsを使用しています。私はすでに多くのJavaScriptを導入している環境で働いており、自分のコードを紹介するクリーンな方法を探しています。
私が抱えている問題は、私が既存のjQueryを破壊しないロードできるjQueryのモジュールを見つけることができないように見えるということです。
require-jquery.jsでさえjQueryのグローバルバージョンを紹介していることに驚きました。 Globalsを導入せずにJQueryをモジュールとしてロードする方法はありますか?
解決
jQuery 1.7はAMDロードをサポートしています。しかし、jQueryは独自のモジュール名を「jQuery」として強調しているため、競合の名前を挙げるモジュールを避けることです。別のモジュールを「jQuery」として定義している場合(たとえば、requirejs configの「パス」プロパティなど)、その競合を引き起こします。
requirejsアプリケーションスコープにjQueryをロードするには、「jQuery-roader」などのモジュールを定義し、jqueryをロードする場合は、「jquery-roader」を介して実行します。
define(['path/to/jquery.min'], function () {
return jQuery.noConflict(true);
});
requirejsは、jquery-flictが最初にjquery-roaderがロードされるときにのみ実行されるように、jqueryへの参照を「キャッシュ」します。
他のヒント
1つのページのjQueryの複数のバージョンが悪いです。ハッキングとアップグレードを停止するか、古いバージョンを使用します。
維持に関して $
安全に試してみてください
(function($) {
// requirejs inclusion block for loading
}(jQuery.noConflict(true));
合格した場合 true
に .noConflict
古いものを置き換えます jQuery
変数であり、それをグローバルに破壊しません。
これは、静かに渡すことができることを意味します。あなたが持っていると言ってください
<script src="jquery-1.2">
<script src="jquery-1.5">
上記のコードを使用すると、1.2が表示されます $
& jQuery
グローバルスペースに戻り、ローカルとして1.5 jQueryを提供します $
あなたの閉鎖で
繰り返しますがアドバイスします 再び 正しい混乱とメンテナンスの悪夢であるため、複数のバージョンを使用します。
1.5を使用している場合は、使用することもできます .sub
拡張できるようにします jQuery
グローバルを破壊することなくローカルに jQuery
jQueryスクリプトをロードして、使用します var myJ = jQuery.noConflict();
またはあなたが望むどんなショートカット変数