Configure Babel
Babel can be configured! Many other tools have similar configs: ESLint (.eslintrc), Prettier (.prettierrc).
All Babel API options are allowed. However, if the option requires JavaScript, you may want to use a JavaScript configuration file.
What's your use case?
- You want to programmatically create the configuration?
- You want to compile
node_modules?
babel.config.jsis for you!
- You have a static configuration that only applies to your simple single package?
.babelrcis for you!
- The Guy Fieri is your hero?
We recommend to use the
babel.config.jsformat. Babel itself is using it.
babel.config.js
Create a file called babel.config.js with the following content at the root of your project (where the package.json is).
module.exports = function (api) {api.cache(true);const presets = [ ... ];const plugins = [ ... ];return {presets,plugins};}
Check out the babel.config.js documentation to see more configuration options.
.babelrc
Create a file called .babelrc with the following content in your project.
{"presets": [...],"plugins": [...]}
Check out the .babelrc documentation to see more configuration options.
package.json
Alternatively, you can choose to specify your .babelrc config from within package.json using the babel key like so:
{"name": "my-package","version": "1.0.0","babel": {"presets": [ ... ],"plugins": [ ... ],}}
.babelrc.js
The configuration is the same as .babelrc, but you can write it using JavaScript.
const presets = [ ... ];const plugins = [ ... ];module.exports = { presets, plugins };
You are allowed to access any Node.js APIs, for example a dynamic configuration based on the process environment:
const presets = [ ... ];const plugins = [ ... ];if (process.env["ENV"] === "prod") {plugins.push(...);}module.exports = { presets, plugins };
Using the CLI (@babel/cli)
babel --plugins @babel/plugin-transform-arrow-functions script.js
Check out the babel-cli documentation to see more configuration options.
Using the API (@babel/core)
require("@babel/core").transform("code", {plugins: ["@babel/plugin-transform-arrow-functions"]});
Check out the babel-core documentation to see more configuration options.