使用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();
或者你想要的任何快捷变量