如何使requirejs一个jQuery插件加载(How to make a jQuery plug

2019-06-25 06:40发布

我与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插件的唯一途径

Answer 1:

你只需要为做

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的成为了一种可能。



Answer 2:

还有一些注意事项与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
  };
})


Answer 3:

正如一个供参考的所有的一些jQuery插件已经使用AMD /需要所以你不需要申报的垫片什么。 其实这样做可能会导致在某些情况下,你的问题。

如果你在jQuery的饼干JS看你会看到定义调用和require([“jQuery的”])。

在jquery.js和你会看到一个调用来定义(“jQuery的”,[],()的函数...



文章来源: How to make a jQuery plugin loadable with requirejs