@babel/cli
Babel comes with a built-in CLI which can be used to compile files from the command line.
The main Babel CLI script, babel.js, lives in the top-level package at @babel/cli/bin.
Install
While you can install Babel CLI globally on your machine, it's much better to install it locally project by project.
There are two primary reasons for this.
- Different projects on the same machine can depend on different versions of Babel allowing you to update them individually.
- Not having an implicit dependency on the environment you are working in makes your project far more portable and easier to setup.
We can install Babel CLI locally by running:
- npm
- Yarn
- pnpm
- Bun
npm install --save-dev @babel/core @babel/cli
yarn add --dev @babel/core @babel/cli
pnpm add --save-dev @babel/core @babel/cli
bun add --dev @babel/core @babel/cli
If you do not have a package.json, create one before installing. This will ensure proper interaction with the npx command.
After that finishes installing, your package.json file should include:
{
"devDependencies": {
+ "@babel/cli": "^8.0.0",
+ "@babel/core": "^8.0.0"
}
}
Usage
Please install @babel/cli and @babel/core first before npx babel, otherwise npx will install out-of-dated babel 6.x. Other than npx, you can also drop it inside of an npm run script or you may instead execute with the relative path instead. ./node_modules/.bin/babel
npx babel script.js
Print Usage
npx babel --help
Compile Files
Compile the file script.js and output to stdout.
npx babel script.js
# output...
If you would like to output to a file you may use --out-file or -o.
npx babel script.js --out-file script-compiled.js
To compile a file every time that you change it, use the --watch or -w option:
npx babel script.js --watch --out-file script-compiled.js
Compile with Source Maps
Since v7.19.3, if this parameter is not specified, @babel/cli will follow the configuration files.
If you would then like to add a source map file you can use
--source-maps or -s.
npx babel script.js --out-file script-compiled.js --source-maps
Or, if you'd rather have inline source maps, use --source-maps inline instead.
npx babel script.js --out-file script-compiled.js --source-maps inline
Compile Directories
Compile the entire src directory and output it to the lib directory by using either --out-dir or -d. This doesn't overwrite any other files or directories in lib.
npx babel src --out-dir lib
Compile the entire src directory and output it as a single concatenated file.
npx babel src --out-file script-compiled.js
Directories with TypeScript Files
Use the --extensions option to specify what file extensions Babel should handle when compiling the entire src directory. The default --extensions can be accessed from Babel.DEFAULT_EXTENSIONS.
npx babel src --out-dir lib \
--extensions .ts,.js,.tsx,.jsx,.cjs,.mjs \
--presets=@babel/preset-typescript,@babel/preset-env,@babel/preset-react
Ignore files
Ignore spec and test files
npx babel src --out-dir lib --ignore "src/**/*.spec.js","src/**/*.test.js"
Copy files
Copy files that will not be compiled
npx babel src --out-dir lib --copy-files
If you don't want to copy ignored JavaScript files:
History
| Version | Changes |
|---|---|
| v7.8.0 | Added --copy-ignored |
| v7.8.4 | Change copyeIgnored option default to true, it can be disabled by --no-copy-ignored |
npx babel src --out-dir lib --copy-files --no-copy-ignored
Piping Files
Pipe a file in via stdin and output it to script-compiled.js
npx babel --out-file script-compiled.js < script.js
Using Plugins
Use the --plugins option to specify plugins to use in compilation
npx babel script.js --out-file script-compiled.js --plugins=@babel/transform-class-properties,@babel/transform-modules-amd
Using Presets
Use the --presets option to specify presets to use in compilation
npx babel script.js --out-file script-compiled.js --presets=@babel/preset-env,@babel/flow
Using Config Files
Ignoring .babelrc.json or .babelrc
Ignore the configuration from the project's .babelrc or .babelrc.json file and use the cli options e.g. for a custom build
npx babel --no-babelrc script.js --out-file script-compiled.js --presets=@babel/preset-env,@babel/preset-react
Custom config path
npx babel --config-file /path/to/my/babel.config.json --out-dir dist ./src
See here for more information about config files.
Set File Extensions
Added in: v7.8.0
By default, the transpiled file will use the .js extension.
You can control the output file extension with --out-file-extension
npx babel src --out-dir lib --out-file-extension .mjs
You can also preserve the input file extension with --keep-file-extension
npx babel src-with-mjs-and-cjs --out-dir lib --keep-file-extension
Note that --keep-file-extension and --out-file-extension cannot be used together.
Output levels
History
| Version | Changes |
|---|---|
| v7.7.0 | Added --silent |
# Log everything to stdout
npx babel script.js --out-file script-compiled.js --verbose
# Mute the "Successfully compiled..." log
npx babel script.js --out-file script-compiled.js --silent
Advanced Usage
There are many more options available, see options, babel --help and other sections for more information.