我与requirejs + jQuery的工作,我想知道是否有做一个jQuery插件的工作很好地需要一个聪明的办法。
例如我使用jQuery的饼干。 如果我理解正确,我可以创建一个名为jQuery的cookie.js文件,其内部也
define(["jquery"], // Require jquery
function($){
// Put here the plugin code.
// No need to return anything as we are augmenting the jQuery object
});
requirejs.config( {
"shim": {
"jquery-cookie" : ["jquery"]
}
} );
我不知道如果我可以做这样的事情jQuery不会,这是这样的:
if ( typeof define === "function" && define.amd && define.amd.jQuery ) {
define( "jquery", [], function () { return jQuery; } );
}
或者,如果这是为了让与requirejs或AMD兼容的jQuery插件的唯一途径
你只需要为做
define(["jquery"], // Require jquery
function($){
// Put here the plugin code.
// No need to return anything as we are augmenting the jQuery object
});
在jQuery的cookie.js,或结束
requirejs.config( {
"shim": {
"jquery-cookie" : ["jquery"]
}
} );
之前的任何地方,你包括jQuery的饼干(如地方的数据要点,例如)。
您发布的最后一个代码块是好的像jQuery的东西得到重新分配,并可能会或可能不会在AMD的环境。 理想的情况是每一个jQuery插件将有一个成立了。
我宁愿保持包括库,纯粹的越好,这样每页一旦全球垫片配置似乎是干净的解决方案给我 。 升级这样更安全,CDN的成为了一种可能。
还有一些注意事项与RequireJS使用垫片配置,指出了http://requirejs.org/docs/api.html#config-shim 。 也就是说,当你使用优化“不要用垫片配置在构建混合CDN负载”。
我一直在寻找一种方式来使用上既没有RequireJS网站使用同一个jQuery插件代码。 我发现这个片段的jQuery插件在https://github.com/umdjs/umd/blob/master/jqueryPlugin.js 。 你换你的插件在这段代码,它会正常工作,无论哪种方式。
(function (factory) {
if (typeof define === 'function' && define.amd) {
// AMD. Register as an anonymous module depending on jQuery.
define(['jquery'], factory);
} else {
// No AMD. Register plugin with global jQuery object.
factory(jQuery);
}
}(function ($) {
$.fn.yourjQueryPlugin = function () {
// Put your plugin code here
};
}));
幸得jrburke; 像这么多的JavaScript,这是内作用于其他函数的函数功能。 但我想我已经解开它在做什么。
功能参数factory
第一线本身是被调用来定义的插件功能$
说法。 如果没有AMD兼容装载机存在,它的直接调用来定义全局的插件jQuery
对象。 这就像常见的插件定义成语:
function($)
{
$.fn.yourjQueryPlugin = function() {
// Plugin code here
};
}(jQuery);
如果有一个模块加载,然后factory
被注册为回调装载机装载的jQuery之后调用。 jQuery的的装载副本的说法。 这相当于
define(['jquery'], function($) {
$.fn.yourjQueryPlugin = function() {
// Plugin code here
};
})
正如一个供参考的所有的一些jQuery插件已经使用AMD /需要所以你不需要申报的垫片什么。 其实这样做可能会导致在某些情况下,你的问题。
如果你在jQuery的饼干JS看你会看到定义调用和require([“jQuery的”])。
在jquery.js和你会看到一个调用来定义(“jQuery的”,[],()的函数...