javascript - Misurare le prestazioni della compilazione di Babel (per file o modulo)
Sto cercando di capire come estrarre alcune informazioni dal processo di compilazione di Babel.
Più specificamente, quando eseguo babel (non importa se usando il babel-loader di Webpack, i trasformatori dei framework di test, la CLI di Babel, ecc.) avrei bisogno di estrarre alcune informazioni per ogni file compilato. Tipo:
- percorso del file
- tempo impiegato per compilare
- qualsiasi altro metadato?
Quello che ho provato finora
Plugin di Misurazione della Velocità per Webpack (link)
Funziona bene ma fornisce solo il tempo di esecuzione dei loader di Webpack. Nessuna informazione sui singoli file compilati.
Collegati all'istanza del compilatore/compilazione di Webpack
Ho considerato di scrivere un plugin per Webpack per agganciarmi al processo di compilazione come descritto qui, ma non sono riuscito a trovare gli hook appropriati per riconoscere un file elaborato da babel.
Aggiornamenti
Immagino che @kidroca abbia indicato la direzione giusta. Più specificamente, capisco che l'opzione wrapPluginVisitorMethod di Babel sia la chiave per agganciarsi al processo di compilazione di Babel.
Vedi il plugin di temporizzazione di babel-minify.
Discussioni correlate:
- \u2028https://github.com/babel/babel/issues/5340
- https://github.com/babel/babel/issues/2206
- https://github.com/babel/babel/pull/3659
- https://github.com/babel/minify/pull/93
- https://github.com/babel/babel/pull/3659
Aggiornamenti 28/04/18
Alla fine ho provato a incapsulare una soluzione in uno strumento che ho chiamato babel-timing.
Risposta n. 1
Puoi usare @babel/core e babel.transformSync(code) che restituiranno informazioni sull'Albero Sintattico Astratto (AST) insieme ad altri dati. E puoi anche aggiungere della logica per misurare le prestazioni di questo metodo
Ho configurato un repository minimale e ci ho giocato un po' da solo: https://github.com/kidroca/babel-meta
Fondamentalmente puoi eseguire npm run analyze-file ./es6-src/es6-module.js o npm run analyze-dir ./es6-src/es6-module.js e controllare i risultati
Questo restituirà:
{
"filename": "/full/path/to/src/file.js",
"cwd": "current/dir",
"ast": "ast information json - lines, comments, and other info",
"executionTime": "execution time in ms",
/* a lot of other info */
}
Puoi modificare il file analyze.js per filtrare le informazioni di cui hai bisogno
Puoi modificare il file .babelrc per controllare la trasformazione e aggiungere/rimuovere plugin
