Bei der Verwendung der Shim-Konfiguration in RequireJS gibt es einige Einschränkungen, auf die unter http://requirejs.org/docs/api.html#config-shim hingewiesen wird . "Mischen Sie das CDN-Laden nicht mit der Shim-Konfiguration in einem Build", wenn Sie den Optimierer verwenden.
Ich suchte nach einer Möglichkeit, denselben jQuery-Plugin-Code auf Websites mit und ohne RequireJS zu verwenden. Ich habe dieses Snippet für jQuery-Plugins unter https://github.com/umdjs/umd/blob/master/jqueryPlugin.js gefunden . Sie wickeln Ihr Plugin in diesen Code ein und es wird in beiden Fällen ordnungsgemäß funktionieren.
(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
};
}));
Kredit geht an jrburke; Wie so viel Javascript sind es Funktionen innerhalb von Funktionen, die auf andere Funktionen einwirken. Aber ich glaube, ich habe ausgepackt, was es tut.
Das Funktionsargument factory
in der ersten Zeile ist selbst eine Funktion, die aufgerufen wird, um das Plugin für das $
Argument zu definieren . Wenn kein AMD-kompatibler Loader vorhanden ist, wird er direkt aufgerufen, um das Plugin für das globale jQuery
Objekt zu definieren . Das ist genau wie die gängige Plugin-Definitionssprache:
function($)
{
$.fn.yourjQueryPlugin = function() {
// Plugin code here
};
}(jQuery);
Wenn ein Modullader vorhanden ist, factory
wird dieser als Rückruf für den Loader registriert, der nach dem Laden von jQuery aufgerufen werden soll. Die geladene Kopie von jQuery ist das Argument. Es ist gleichbedeutend mit
define(['jquery'], function($) {
$.fn.yourjQueryPlugin = function() {
// Plugin code here
};
})