使用requirejs和jquery,而不是破坏全局jquery?

我第一次在项目中使用requirejs。 我正在一个已经有很多Javascript的环境中工作,我正在寻找干净的方法来介绍我自己的代码。

我遇到的问题是我似乎无法找到我可以加载的jQuery模块,它不会破坏现有的jQuery。

我很惊讶即使require-jquery.js引入了jQuery的全局版本。 有没有办法加载jQuery作为模块而不引入任何全局变量?

jQuery 1.7支持AMD加载。 但是,诀窍是避免模块命名冲突,因为jQuery将其自己的模块名称硬编码为“jquery”。 如果您将另一个模块定义为’jquery’(例如,在requirejs配置中的’paths’属性中),则会导致所述冲突。

要在requirejs应用程序范围中加载jQuery,请定义一个模块,例如’jquery-loader’,当你想加载jQuery时,通过’jquery-loader’来完成:

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

requirejs将’缓存’你对jQuery的引用,这样noConflict只会在第一次加载jquery-loader时运行。

一个页面上的多个版本的jQuery很糟糕。 停止黑客攻击并升级jQuery或使用旧版本。

至于保持$安全尝试

 (function($) { // requirejs inclusion block for loading }(jQuery.noConflict(true)); 

如果将true传递给.noConflict ,它将替换旧的jQuery变量,而不是全局销毁它。

这意味着你可以安静地传递它。 说你有

  

然后使用上面的代码将1.2 $jQuery放回全局空间,并在闭包中为您提供1.5 jQuery作为本地$

我再次建议AGAINTS使用多个版本,因为它是一个正确的混乱和维护噩梦。

如果你使用1.5,你也可以使用.sub来允许你在本地扩展jQuery而不会破坏全局jQuery

加载jQuery脚本然后使用var myJ = jQuery.noConflict();

或者你想要的任何快捷变量

http://docs.jquery.com/Using_jQuery_with_Other_Libraries