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

时间:2011-02-01 03:00:06

标签: jquery module requirejs

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

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

我很惊讶甚至require-jquery.js引入了jQuery的全局版本。有没有办法在不引入任何全局变量的情况下将jQuery作为模块加载?

3 个答案:

答案 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();

或任何你想要的快捷变量

http://docs.jquery.com/Using_jQuery_with_Other_Libraries