21

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

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

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

4

3 回答 3

24

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

要在您的 requirejs 应用程序范围内加载 jQuery,请定义一个模块,例如“jquery-loader”,当您想要加载 jQuery 时,请通过“jquery-loader”进行:

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

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

于 2012-03-07T00:02:56.673 回答
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 $&放回全局空间,并在闭包jQuery中将 1.5 jQuery 作为本地$

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

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

于 2011-02-01T03:08:19.803 回答
-3

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

或您想要的任何快捷方式变量

http://docs.jquery.com/Using_jQuery_with_Other_Libraries

于 2011-02-01T03:04:59.500 回答