RequireJS不同的jQuery

我想使用RequireJS来加载jQuery(我开发的模块应该在jQuery可能已经初始化的不受控制的环境中工作),但是当需要不同版本的jQuery时会出现一些问题。 结果是不可想象的。 里面需要的function块jQuery版本是随机的。 怎么了? 这是代码来说明问题:

        console.log(jQuery.fn.jquery); setTimeout(function(){ require(["http://ajax.googleapis.com/ajax/libs/jquery/1.8.0/jquery.min.js"], function() { console.log($.fn.jquery); }); },1000); setTimeout(function(){ require(["http://ajax.googleapis.com/ajax/libs/jquery/1.4.4/jquery.js"], function() { console.log($.fn.jquery); }); },2000); setTimeout(function(){ require(["http://ajax.googleapis.com/ajax/libs/jquery/1.8.0/jquery.js"], function() { console.log($.fn.jquery); }); },3000); setTimeout(function(){ require(["http://ajax.googleapis.com/ajax/libs/jquery/1.4.4/jquery.js"], function() { console.log($.fn.jquery); }); },4000); setTimeout(function(){ require(["http://ajax.googleapis.com/ajax/libs/jquery/1.6.2/jquery.min.js"], function() { console.log($.fn.jquery); }); },5000); setTimeout(function(){ require(["http://ajax.googleapis.com/ajax/libs/jquery/1.8.0/jquery.min.js"], function() { console.log($.fn.jquery); }); },6000); setTimeout(function(){ require(["http://ajax.googleapis.com/ajax/libs/jquery/1.4.4/jquery.js"], function() { console.log($.fn.jquery); }); },7000); setTimeout(function(){ require(["http://ajax.googleapis.com/ajax/libs/jquery/1.8.0/jquery.js"], function() { console.log($.fn.jquery); }); },8000); setTimeout(function(){ require(["http://ajax.googleapis.com/ajax/libs/jquery/1.6.2/jquery.min.js"], function() { console.log($.fn.jquery); }); },9000);    

结果是:

 1.6.2 1.8.0 1.4.4 1.8.0 1.8.0 1.6.2 1.6.2 1.6.2 1.6.2 1.6.2 

假设您正在使用AMD(异步模块定义)兼容版本的jQuery,那么jQuery对象应该可用作该函数的第一个参数:

 require(["some_version_of_jquery.js"], function(jQuery) { console.log(jQuery.fn.jquery); }); 

因此,函数内可用的jQuery对象是在本地范围内定义的,而不是全局定义的。

如果您不使用AMD兼容版本,则必须使用RequireJS Shim配置。