Quando si creano i moduli AMD, è possibile esportare ciò che si desidera, sia esso un oggetto o una funzione. Ricordo vagamente leggendo una raccomandazione da qualche parte per esportare solo una cosa; l'idea è di "tenerlo piccolo".
Usando questa filosofia significa che si potrebbe arrivare fino all'esportazione di singole funzioni. E quando questo è accoppiato con l'idea di composizione, molto probabilmente userete una funzione per costruire un'altra funzione. Di conseguenza, quando si carica una pagina che utilizza una funzione altamente composta, è possibile che si scarichi in modo asincrono una manciata di piccoli moduli per creare una funzione composta.
Prendi underscore.js che ha molte funzioni integrate. Ci sono pagine web in cui ho solo bisogno di una o due delle sue funzioni, ma mi trovo un po 'in disaccordo con l'intera libreria come modulo solo per quello. Sono quasi tentato di riscrivere l'una o due funzioni per evitarlo, ma questo va contro l'idea del riuso. Tuttavia, poiché underscore ha diverse dozzine di funzioni, tirarlo giù con un caricatore AMD come RequireJS significa spesso abbattere più del necessario. Se si va all'estremo opposto, decomponendo una libreria come underscore in moduli a funzione singola, si può imbattersi nel già citato problema di tirare un paio di manciate di piccoli moduli quando sono necessarie funzioni altamente composte.
Quindi qual è il verdetto? Come si disegna la linea quando si decide quanto esportare da un modulo AMD? Una funzione è la più piccola unità componibile. Un oggetto che viene esportato è spesso uno spazio dei nomi che offre a una suite funzioni, molte delle quali non vengono utilizzate.
Ho cercato online le discussioni su questo argomento, ma a quanto pare non sono riuscito a trovare i termini di ricerca giusti per individuarli. Se ne sei a conoscenza, ti preghiamo di includere eventuali link in cui è stato discusso per supportare la tua risposta.