Babel timing
Measure Babel compilation time file by file, plugin by plugin. See screenshot.
Get some insights about Babel transpilation when your application or your tests take ages to build.
Note: this tool is in version 0, any minor release might introduce breaking changes.
Installation
Can be installed both as global or local dependency.
npm i babel-timing
yarn add babel-timing
Usage
CLI
babel-timing path/to/file-1.js path/to/file-2.js
babel-timing path/to/file-*.js
babel-timing path/to/entrypoint.js --follow-imports
Node
const babelTiming = require('babel-timing').babelTiming;
const results = await babelTiming(['path/to/file.js'], options);
Options
babelConfig
/ --babel-config
Type: string | false
Default: undefined
Path to a custom babel configuration file. By default Babel will try to load any existing valid configuration file.
followImports
/ --follow-imports
Type: bool
Default: false
Follow imported files/modules and run babel-timing
against them.
include
/ --include
Type: string[]
(cli accepts a string containing a comma-separated list)
Default: ['**']
Include paths (imported ones also) according to the provided glob patterns.
exclude
/ --exclude
Type: string[]
(cli accepts a string containing a comma-separated list)
Default: ['**/modules/**']
Exclude paths (imported ones also) according to the provided glob patterns.
resolveMainFields
/ --resolve-main-fields
Type: string[]
(cli accepts a string containing a comma-separated list)
Default: ['browser', 'module', 'main']
Determine which fields in imported modules's package.json
are checked.
expandPackages
/ --expand-packages
Type: bool
Default: false
Expand results relative to node_modules
packages file by file.
output
/ --output
Type: string
Default: "return"
("console"
when called via CLI)
Options: "return"
, "console"
, "json"
Make babel-timing
results available as:
"return"
return results' object"console"
render results in console"json"
save results as babel-timing-results.json
verbose
/ --verbose
Type: bool
Default: false
Log warnings.
How it works
Compile files with Babel 7 and get collect compilation info through wrapPluginVisitorMethod
Babel config option.
Results
Compilation info are extracted into the following data structure:
type Results = {
name: string,
totalTime: number,
plugins: {
plugin: string,
timePerVisit: number,
time: number,
visits: number,
}[]
}[]
Notes
This tool started as an attempt of measuring the time taken by Babel while running transpiled tests or compiling applications with a bundler like Webpack.
I didn't find find a way of simply monitoring Babel while running the aforementioned tools, since I couldn't relate the wrapPluginVisitorMethod
calls to the file actually being compiled.
Any further idea/contribution to get to a better Babel monitoring solution is welcome.
Manual tests :)
node cli.js __fixtures__/file-1.js
node cli.js __fixtures__/file-1.js __fixtures__/file-2.js
node cli.js __fixtures__/*.js
node cli.js __fixtures__/entry.js --follow-imports
Thanks to
Todo
- Add
csv
output option - Expose
wrapPluginVisitorMethod
- Provide a way to consume
babel-timing
from other tools like webpack
, jest
, rollup
, etc..