javascript - Mål Babel-kompilationsydelse (pr. fil eller modul)
Jeg prøver at finde ud af, hvordan man udtrækker nogle oplysninger fra babel kompilationsprocessen.
Mere specifikt, når jeg kører babel (uanset om jeg bruger Webpacks babel-loader, testframeworks' transformere, Babels CLI osv.) har jeg brug for at udtrække nogle oplysninger for hver kompileret fil. Som:
- filsti
- tid brugt på at kompilere
- nogle andre metadata?
Hvad jeg har prøvet indtil nu
Hastighedsmålingsplugin til Webpack (link)
Fungerer fint, men det giver kun Webpacks loaders køretid. Ingen information om enkelte kompilerede filer.
Kobl ind i Webpacks compiler/kompilationsinstans
Jeg overvejede at skrive et Webpack-plugin for at koble ind i kompilationsprocessen som beskrevet her, men jeg kunne ikke finde de rigtige hooks til at genkende en fil, der bliver behandlet af babel.
Opdateringer
Jeg gætter på, at @kidroca pegede i den rigtige retning. Mere specifikt forstår jeg, at BABELs wrapPluginVisitorMethod-mulighed er nøglen til at hægte sig på BABEL-kompileringsprocessen.
Se babel-minify’s timing-plugin.
Relaterede tråde:
- https://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
Opdateringer 28/04/18
Jeg prøvede til sidst at pakke en løsning ind i et værktøj, jeg kaldte babel-timing.
Svar #1
Du kan bruge @babel/core og babel.transformSync(code), som vil returnere Abstract Syntax Tree (AST) information sammen med nogle andre data. Og du kan også tilføje noget logik for at måle ydeevnen af denne metode
Jeg har sat et minimalt repository op og leget lidt med det selv: https://github.com/kidroca/babel-meta
Grundlæggende kan du køre npm run analyze-file ./es6-src/es6-module.js eller npm run analyze-dir ./es6-src/es6-module.js og se resultaterne
Dette vil returnere:
{
"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 */
}
Du kan ændre analyze.js-filen for at filtrere de oplysninger, du har brug for
Du kan ændre .babelrc-filen for at styre transformationen og tilføje/fjerne plugins
