Molte librerie JavaScript dispongono di uno strumento Builder che consente di "modellare" le funzionalità della libreria da cui si dipende, sia in termini di costo della larghezza di banda di download per il client sia in termini di isolamento delle funzionalità effettivamente necessarie.Modellazione modulo AMD: come caricare solo una funzione JS?
Ad esempio, mi piacciono molte cose in sugar.js, ma semplicemente non ho bisogno o non voglio la gestione dei set di caratteri katakana e hiragana. Come esempio più banale, voglio essere in grado di "modellare" sugar.js per esportare solo string.isBlank().
C'è uno strumento disponibile per fare questo per me? C'è qualche sforzo in corso da parte del comitato EcmaScript per fare qualcosa di simile in una versione futura di JavaScript? I linguaggi di livello superiore come TypeScript e CoffeeScript offrono un supporto nascosto per tale "modellazione"? Posso fare questo "shaping" in C# per .NET DLL via monolinker.
Fondamentalmente, mi sembra che AMD gestisca l'aspetto Loader di un compilatore moderno, ma non gestisce l'aspetto Linker. I builder per jquery e dojo funzionano solo per un modulo specifico e non sono veri Linker, solo Builder.
UPDATE:Google Closure Compiler è un compilatore che accetta JavaScript come input e produce JavaScript come output. La documentazione Advanced Compilation and Externs suggerisce che c'è una chiamata API per fare questo:
Se mettendo insieme queste dichiarazioni di esportazione sembra troppo noioso, è possibile utilizzare una funzione per fare l'esportazione per voi. Vedere le funzioni Libreria di chiusura goog.exportSymbol() e goog.exportProperty() per esempi di funzioni di esportazione.
Tuttavia, questo sembra piuttosto complicato e mi rende direttamente dipendente da Google Closure Compiler. A questo punto, sto cercando informazioni sugli standard futuri dal Comitato EcmaScript, in riferimento a CommonJS, e per qualsiasi saggezza da parte di persone che hanno pensato a questo problema e hanno tentato di affrontarlo. Soprattutto da parte di altri sviluppatori TypeScript; Non voglio creare i file dichiarare in TypeScript per sugar.js, quindi utilizzare Google Closure Compiler contro il mio output del compilatore TypeScript. Sembra semplicemente impossibile e difficile da eseguire il debug.
Questa è una buona domanda. Non penso che nessuno strumento possa farlo automaticamente. JavaScript è così flessibile, non è raro vedere un cambio di funzione in fase di esecuzione o in base allo stato dell'applicazione ... Potrebbe essere difficile estrarre facilmente una funzione in modo semplice. Quindi, posso assicurarti che in questo momento, non puoi usare un Linker per ottenere solo $ $ .each da jQuery se gli autori originali non hanno integrato l'opzione. Possa venire questo? Forse, ma non l'ho visto nel prossimo futuro. (forse tutto il lavoro svolto sugli strumenti di analisi statica in questo momento aiuterà ad andare in questo modo) –
Questo è quello che sospettavo.Ho visto Allen Wirfs-Brock e Nikolai Tillman di MS Research fornire esempi in cui un blocco di codice JS a 6 righe in isolamento potrebbe avere dozzine di significati diversi a seconda di ciò che le variabili sono digitate come * ora dell'interpretazione *. Quindi, perché ho anche chiesto informazioni su TypeScript e altri linguaggi di alto livello che supportano la digitazione opzionale. Grazie! –
Ecco l'esempio di Nikolai, tratto dal suo discorso sullo SPUR al VMIL 2010 (http://www.cs.iastate.edu/~design/vmil/2010/slides/p03-tillmann-slides.pdf) var sum = 0; for (var i = 0; i <1000; i ++) { if (i == 990) { sum + = "Ciao Mondo" } sum + = 1 } di stampa (somma) –