2011-02-01 40 views
20

我在項目中第一次使用requirejs。我在一個已經有很多Javascript的環境中工作,並且我正在尋找乾淨的方法來介紹我自己的代碼。使用requirejs和jquery,而沒有破壞全局jquery?

我遇到的問題是,我似乎無法找到一個jQuery模塊,我可以加載,而不會打開現有的jQuery。

我很驚訝,甚至需要-jquery.js引入了jQuery的全局版本。有沒有一種方法來加載jQuery作爲一個模塊,而不引入任何全局變量?

回答

24

的jQuery 1.7支持AMD加載。但是,訣竅是避免模塊命名衝突,因爲jQuery將自己的模塊名稱硬編碼爲'jquery'。如果你將另一個模塊定義爲'jquery'(比如說,在你的requirejs配置文件的'paths'屬性中),它會導致衝突。

要加載的jQuery在requirejs應用範圍,定義一個模塊,如「jQuery的裝載機」,當你要加載jQuery的,通過「jQuery的裝載機」做到這一點:

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

requirejs會'緩存'你對jQuery的引用,這樣noConflict只會在第一次加載jquery-loader時運行。

3

多個版本是壞的。停止黑客入侵併升級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

+1

針對多個版本的好建議......但是有一些cms插件與打包庫一起提供。我已經看到了3個jQuery /原型版本被cms混合的頁面 - 我想知道是否有接近YUI版本方法的解決方案... – mfeineis 2012-02-04 16:15:05