如何使一个jQuery插件加载requirejs

我正在与requirejs + jquery,我想知道是否有一个聪明的方法,使jQuery插件与需求很好地工作。

例如,我正在使用jQuery-cookie。 如果我理解正确,我可以创build一个名为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; } ); } 

或者如果这是使jQuery插件与requirejs或任何amd兼容的唯一方法

你只需要做任何事情

 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"] } } ); 

你可以在任何地方joinjquery-cookie(比如数据主要指向的地方)。

你发布的最后一个代码块对于像jQuery这样的被重新分配的东西是有用的,而且可能不在AMD环境中。 理想情况下,每个jQuery插件都已经设置好了。

我更愿意尽可能保持包含的库,所以每页一次的全局填充configuration对我来说似乎是最干净的解决scheme 。 这样升级更安全,CDN成为可能。

在RequireJS中使用shimconfiguration有一些注意事项,在http://requirejs.org/docs/api.html#config-shim中指出。; 即,当您使用优化器时,“不要在构build中将CDN加载与shimconfiguration混合”。

我正在寻找一种方法来使用相同的jQuery插件代码在有和没有RequireJS的网站上。 我在https://github.com/umdjs/umd/blob/master/jqueryPlugin.jsfind了这个jQuery插件的片段。; 你用这个代码封装你的插件,它可以正常工作。

 (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,它是function内的函数在其他function。 但是我想我已经解开了它正在做的事情。

第一行的函数参数factory本身是一个被调用来定义$参数上的插件的函数。 当没有AMD兼容的加载器时,直接调用它来定义全局jQuery对象上的插件。 这就像常见的插件定义成语一样:

 function($) { $.fn.yourjQueryPlugin = function() { // Plugin code here }; }(jQuery); 

如果有一个模块加载器,则factory被注册为加载器在加载jQuery之后调用的callback。 jQuery的加载副本是参数。 这相当于

 define(['jquery'], function($) { $.fn.yourjQueryPlugin = function() { // Plugin code here }; }) 

就像所有的jQuery插件已经使用amd / require一样,所以你不需要在垫片中声明任何东西。 事实上,在某些情况下这样做可能会给您带来麻烦。

如果你在jquery cookie JS中看,你会看到定义调用和require([“jquery”])。

和jquery.js中,你会看到一个调用define(“jquery”,[],函数()…