2012-02-29 16 views
294

Ho giocato con requirejs negli ultimi giorni. Sto cercando di capire le differenze tra definire e richiedere.Quando dovrei usare require() e quando usare define()?

La definizione sembra consentire la separazione dei moduli e consentire l'adesione delle dipendenze. Ma scarica tutti i file di cui ha bisogno per cominciare. Mentre richiedono solo carichi ciò di cui hai bisogno quando ne hai bisogno.

Questi due possono essere utilizzati insieme e per quali scopi deve essere utilizzato ciascuno di essi?

risposta

314

Con define si registra un modulo in require.js che può quindi dipendere in altre definizioni modulo o richiedere istruzioni. Con require "basta" caricare/utilizzare un modulo o un file javascript che può essere caricato da require.js. Per esempi hanno uno sguardo al documentation

mia regola:

  • Definire: Se si desidera dichiarare un modulo di altre parti della vostra applicazione dipenderanno.

  • Richiesta: se si desidera caricare e utilizzare solo materiale.

319

Dalle require.js source code (linea 1902):

/** 
* The function that handles definitions of modules. Differs from 
* require() in that a string for the module should be the first argument, 
* and the function to execute after dependencies are loaded should 
* return a value to define the module corresponding to the first argument's 
* name. 
*/ 

La funzione define() accetta due parametri facoltativi (una stringa che rappresenta un ID del modulo e una serie di moduli necessari) e un parametro richiesto (un metodo di fabbrica).

Il ritorno dello stabilimento metodo di MUST tornare l'implementazione per il modulo (nello stesso modo in cui il Module Pattern fa).

La funzione require() non deve restituire l'implementazione di un nuovo modulo.

Utilizzando define() si sta chiedendo qualcosa come "eseguire la funzione che sto passando come parametro e assegnare qualunque ritorna l'ID che sto passando, ma, prima, controllare che queste dipendenze sono caricati".

Utilizzando require() che stai dicendo qualcosa come "la funzione che mi passare ha le seguenti dipendenze, verificare che queste dipendenze vengono caricati prima di eseguirlo".

La funzione require() è dove si utilizzano i moduli definiti, per essere certi che i moduli siano definiti, ma non si definiscono nuovi moduli lì.

+1

C'è qualche differenza sul fatto che il requisito sia utilizzato all'interno di un modulo definito o al di fuori di esso? Se viene utilizzato all'interno di un modulo, perché non è sufficiente impostare i requisiti nella definizione del modulo anziché richiedere? – Petri

+0

Perché questa risposta è così diversa da ciò che ho letto qui http://requirejs.org/docs/api.html#deffunc ?? –

+1

@Petri, sembra che tu stia vedendo il comportamento di RequireJS nella versione 2 del caricamento dei moduli in modo asincrono. "RequireJS 2.0 non eseguirà la funzione di fabbrica del modulo (la funzione è passata a' define() '), fino a quando non c'è stata una chiamata' require ([]) 'che l'ha richiesta, o qualcosa che dipende da esso." https://github.com/jrburke/requirejs/wiki/Upgrading-to-RequireJS-2.0#delayed – alxndr

1

"definire" metodo per facilitare definizione di modulo e "richiedono" metodo per la gestione da dipendere carico

definiscono viene utilizzata per definire denominata o moduli senza nome sulla base della proposta utilizzando la seguente firma:

define(
module_id /*optional*/, 
[dependencies] /*optional*/, 
definition function /*function for instantiating the module or object*/ 
); 

richiedono in genere viene utilizzato per caricare il codice in un file JavaScript di livello superiore o all'interno di un modulo se si desidera recuperare in modo dinamico le dipendenze

Fare riferimento a https://addyosmani.com/writing-modular-js/ per ulteriori informazioni.

1

require() e define() entrambi utilizzati per caricare le dipendenze. C'è una grande differenza tra questi due metodi.

è molto semplice Ragazzi

require(): il metodo viene utilizzato per eseguire le funzionalità immediate. define(): Metodo utilizzato per definire i moduli da utilizzare in più posizioni (riutilizzo).

Problemi correlati