Ci sono alcuni avvertimenti sull'utilizzo della configurazione shim in RequireJS, indicati su http://requirejs.org/docs/api.html#config-shim . Vale a dire, "Non mischiare il caricamento CDN con la configurazione shim in una build" quando utilizzi l'ottimizzatore.
Stavo cercando un modo per utilizzare lo stesso codice plugin jQuery su siti con e senza RequireJS. Ho trovato questo snippet per i plugin jQuery su https://github.com/umdjs/umd/blob/master/jqueryPlugin.js . Inserisci il tuo plugin in questo codice e funzionerà correttamente in entrambi i casi.
(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
};
}));
Il merito va a jrburke; come molto javascript, le sue funzioni all'interno di funzioni che agiscono su altre funzioni. Ma penso di aver disimballato cosa sta facendo.
L'argomento della funzione factory
nella prima riga è esso stesso una funzione che viene invocata per definire il plugin $
sull'argomento. Quando non è presente alcun caricatore compatibile con AMD, viene richiamato direttamente per definire il plug-in jQuery
sull'oggetto globale . È proprio come l'idioma comune della definizione di plugin:
function($)
{
$.fn.yourjQueryPlugin = function() {
// Plugin code here
};
}(jQuery);
Se è presente un caricatore di moduli, factory
viene registrato come callback per il caricatore da richiamare dopo aver caricato jQuery. La copia caricata di jQuery è l'argomento. È equivalente a
define(['jquery'], function($) {
$.fn.yourjQueryPlugin = function() {
// Plugin code here
};
})