我正在尝试将 jQuery 作为 YUI 模块加载,而不将其添加到全局范围。
我想出的最好的方法是创建一个全局的module.exports
,以便 jQuery 认为它是一个通用的 js 模式,并且不创建一个全局的 jQuery 对象......
// must create global object for jQuery to detect and attach to
// otherwise it will create itself in the global scope
module = {
exports: {}
};
YUI({
modules: {
'my-jquery': {
fullpath: '//cdnjs.cloudflare.com/ajax/libs/jquery/1.10.1/jquery.min.js',
requires: [
'node']
}
},
onProgress: function (e) {
switch (e.name) {
case 'my-jquery':
(function () {
var clone;
YUI.add('my-jquery', function (Y) {
if (!clone) {
clone = Y.clone(module.exports, true);
module.exports = {};
}
Y.namespace('my').jQuery = clone;
}, '1.10.1', {
requires: [
'node']
});
})();
break;
}
}
}).use('my-jquery', function (Y) {
console.log('before');
var jQuery = $ = Y.my.jQuery;
console.log('walks');
// regular old jQuery stuff here...
$('#main').hide();
// no global jQuery object
console.log(1, window.jQuery);
// there is a local jQuery object
console.log(2, jQuery);
})
演示:http: //jsfiddle.net/syvGZ/2/
有没有更好的方法在 YUI 中加载 jQuery 而无需触及全局范围?