Così ho iniziato a imparare come usare requirejs e combinarlo con alcune delle altre librerie javascript disponibili. Come ho capito, è necessario shim tutte le librerie che non sono Asynchronous module definition compatible (AMD), ma oltre alla ricerca attraverso il codice della libreria per "require" c'è un modo più semplice per capire quali librerie supportano AMD e quali no? Ad esempio, so che jquery supporta AMD ma jqueryui no, e lo so solo perché "qualcuno mi ha detto".Come sapere se una libreria javascript supporta AMD
risposta
Ecco come jQuery dichiara il proprio AMD. Sono solo un mucchio di dichiarazioni if. A meno che le librerie non abbiano un numero di library.AMD === true
, non c'è modo di controllare dalla libreria stessa.
if (typeof module === "object" && module && typeof module.exports === "object") {
module.exports = jQuery;
} else {
window.jQuery = window.$ = jQuery;
if (typeof define === "function" && define.amd) {
define("jquery", [], function() { return jQuery; });
}
}
Tuttavia, c'è un modo per controllare i moduli già caricati. This answer afferma che è possibile controllare require.s.contexts._.defined
, che è un oggetto contenente la mappatura dei nomi-definizione dei moduli già caricati.
Ad esempio, se ho caricato jQuery (che di default ha AMD) nella pagina che ha anche RequireJS, una proprietà jquery
esisterà in quell'oggetto e contiene lo stesso oggetto jQuery come globale. È quindi possibile confrontare. Di seguito tornerà true
:
require.s.contexts._.defined.jquery === jQuery
require.s.contexts._.defined.jquery === $
Tuttavia, questo presuppone che si conosce il nome del modulo e/o c'è un mondiale da confrontare. Questo potrebbe non funzionare in tutti i casi. Ad esempio, l'interfaccia utente di jQuery non è solo un grande pezzo di codice. È un mucchio di plugin alloggiati sotto un jquery-ui.js
. C'è la possibilità che o possano essere nominati collettivamente o un modulo per widget. L'interfaccia utente di jQuery non ha nemmeno un globale.
Sarete alla ricerca di AMD formatdefine()
chiamate nelle fonti, dove di solito vengono in tre gusti:
- Nessun modulo AMD definiti, in cui dovrete configurare uno spessore in RequireJS;
- Supporto AMD opzionale, in cui di solito si verificano degli sniffing per la dipendenza da
define()
nei globals nella parte inferiore; - Modulo AMD di prima classe, in cui tutto è incluso in una chiamata a
define()
.
E 'bene notare che si otterrà un errore se il vostro cercando di spessorare un modulo AMD per errore, oppure caricare uno script come modulo di AMD che non chiama mai define()
di crearne uno.
Grazie per aver chiarito che Filip.Solo per curiosità ho fatto un rapido test per verificare se avrei ricevuto un errore se avessi sfogliato una libreria compatibile con AMD o visa-versa ma, per quanto posso vedere, non trovo nulla nel log della console. Hai un breve esempio che mostra questo? –
- 1. supporta sia CommonJS e AMD
- 2. AngularJS supporta AMD come RequireJS?
- 3. Come posso sapere se un server supporta l'intestazione Range?
- 4. Come sapere se esiste una finestra in Javascript?
- 5. Come sapere se PropertyInfo è una raccolta
- 6. PHP: come determinare se il browser supporta javascript in PHP?
- 7. come sapere se una stringa $ termina con ','?
- 8. Come sapere se una stringa contiene accenti
- 9. Come fai a sapere se una libreria JavaScript che stai usando interromperà il tuo codice dopo un aggiornamento?
- 10. come sapere se una proprietà esiste ed è falsa
- 11. Come sapere se tutti i valori dell'oggetto javascript sono veri?
- 12. È possibile rilevare JavaScript se il browser dell'utente supporta gzip?
- 13. Nancy.ViewEngines.Razor v0.12.1.0 supporta le viste Layout amd _ViewStart?
- 14. Modellazione modulo AMD: come caricare solo una funzione JS?
- 15. implementazione tipografico AMD male con Javascript/RequireJS
- 16. Come verificare se il browser supporta HTML5?
- 17. Implementazione di AMD in JavaScript utilizzando RequireJS
- 18. Come si può estendere un modulo Javascript definito con AMD?
- 19. Come sapere se una classe discende da un'altra classe
- 20. Come si può creare una libreria riutilizzabile strutturata come modulo/i AMD?
- 21. Come posso sapere se una variabile VARCHAR contiene una sottostringa?
- 22. Come faccio a sapere se una tabella è una matrice?
- 23. Una buona libreria JavaScript Text-to-Speech
- 24. Quando si progetta una libreria JS, è necessario renderlo RequireJS/AMD compatibile o no?
- 25. Come posso sapere se un browser supporta <input type = 'data'>
- 26. Come faccio a sapere se il mio browser supporta SVG 2.0?
- 27. Download di una libreria Javascript come immagine?
- 28. Come abilitare Intellisense per i moduli JavaScript AMD in VSCode
- 29. Come faccio a sapere se il mio Tomcat supporta Servlet 3.0 o no?
- 30. Come fa un browser a sapere se un sito supporta HTTP/2?
Si potrebbe indurre la gente a parlare di questo quando parli di AMD, non stai parlando della CPU/società di semiconduttori video, ma suppongo tu stia parlando di [Asynchronous Module Definition] (http: // gregfranko. com/blog/registrazione-the-jQueryUI-widget di fabbrica-come-un-amd-modulo /). – jfriend00
@ jfriend00, [Asynchronous_module_definition] (http://en.wikipedia.org/wiki/Asynchronous_module_definition), sai che cosa significa "OP", vero? –
NON sapevo cosa volessero dire. Ho pensato che stessero chiedendo la compatibilità della scheda video AMD. Solo quando ho cercato su Google ho trovato quello che volevano dire. Modificherò la domanda personalmente per assicurarmi che sia chiaro agli altri lettori. – jfriend00