我第一次在项目中使用requirejs。我在一个已经有很多Javascript的环境中工作,我正在寻找干净的方法来介绍我自己的代码。
我遇到的问题是我似乎无法找到一个可以加载的jQuery模块,它不会破坏现有的jQuery。
我很惊讶甚至require-jquery.js引入了jQuery的全局版本。有没有办法在不引入任何全局变量的情况下将jQuery作为模块加载?
答案 0 :(得分:24)
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时运行。
答案 1 :(得分:3)
一个页面上的多个版本的jQuery很糟糕。停止黑客攻击并升级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 $
&amp; jQuery
返回全局空间,并在闭包中为您提供1.5 jQuery作为本地$
我再次建议使用多个版本 AGAINTS ,因为它是一个正确的混乱和维护的噩梦。
如果您使用1.5,则还可以使用.sub
在本地扩展jQuery
而不会损坏全局jQuery
答案 2 :(得分:-3)
加载jQuery脚本,然后使用var myJ = jQuery.noConflict();
或任何你想要的快捷变量