Cheatsheet Babel
Compilador de JavaScript para compatibilidade com browsers antigos
Babel
19
cards found
Categories:
Versions:
Setup
Install
npm i -D @babel/core @babel/cli
npm i -D @babel/preset-env
# With webpack:
npm i -D babel-loader
Essential packages.
Minimal Config
// babel.config.json
{
"presets": [
["@babel/preset-env", {
"targets": "defaults"
}]
]
}
Basic configuration.
With webpack
// webpack.config.js
module: {
rules: [{
test: /\.js$/,
exclude: /node_modules/,
use: 'babel-loader',
}]
}
Integrate with webpack.
Presets
@babel/preset-env
{
"presets": [[
"@babel/preset-env", {
"targets": "> 0.25%, not dead",
"useBuiltIns": "usage",
"corejs": 3
}
]]
}Main preset (recommended).
@babel/preset-react
npm i -D @babel/preset-react
{
"presets": [
["@babel/preset-react", {
"runtime": "automatic"
}]
]
}
JSX support.
@babel/preset-typescript
npm i -D @babel/preset-typescript
{
"presets": [
"@babel/preset-typescript"
]
}
Strip TypeScript types.
Targets (browserslist)
"targets": "defaults"
"targets": "> 1%, last 2 versions"
"targets": { "node": "18" }
"targets": { "chrome": "90" }
// or .browserslistrc:
> 0.5%
last 2 versions
not dead
Define target browsers.
Plugins
Proposal Plugins
@babel/plugin-proposal-decorators
@babel/plugin-proposal-pipeline-operator
@babel/plugin-transform-runtime
{
"plugins": [
"@babel/plugin-transform-runtime"
]
}
Experimental features.
transform-runtime
npm i -D @babel/plugin-transform-runtime
npm i @babel/runtime
{
"plugins": [[
"@babel/plugin-transform-runtime",
{ "corejs": 3 }
]]
}
Avoid helper duplication.
Syntax Plugins
@babel/plugin-syntax-dynamic-import
@babel/plugin-syntax-import-meta
@babel/plugin-proposal-class-properties
// Most already included in preset-env
Specific syntax.
Settings
babel.config.js vs .babelrc
# babel.config.js → whole project
# .babelrc → only the package/directory
# Monorepo: use babel.config.js
# Library: use .babelrc
Scope differences.
Config Options
{
"presets": [],
"plugins": [],
"sourceMaps": true,
"env": {
"test": {
"presets": [["preset-env",
{ "targets": { "node": "current" }}]]
}
}
}Per-environment config.
Overrides
{
"overrides": [{
"test": ["./src/legacy/**/*.js"],
"presets": [[
"@babel/preset-env",
{ "targets": "ie 11" }
]]
}]
}Per-file rules.
CLI
Commands
npx babel src --out-dir lib
npx babel src -d lib --watch
npx babel file.js -o output.js
npx babel src -d lib --source-maps
Compile with the CLI.
Flags
--out-dir, -d # output directory
--out-file, -o # output file
--watch, -w # watch mode
--source-maps # generate source maps
--extensions # .js,.jsx,.ts
--ignore # patterns to ignore
CLI options.
npm Scripts
"scripts": {
"build": "babel src -d lib",
"dev": "babel src -d lib -w",
"clean": "rm -rf lib && babel src -d lib"
}Build scripts.
Advanced
Polyfills (core-js)
npm i core-js@3
// useBuiltIns options:
"usage" # imports only what is needed
"entry" # imports everything at the entry
false # no polyfills (default)
Automatic polyfills.
With Jest
// babel.config.js
module.exports = {
presets: [
['@babel/preset-env',
{ targets: { node: 'current' }}],
],
};
Config for tests.
Debug and Verbose
{
"presets": [[
"@babel/preset-env", {
"debug": true
}
]]
}
// Shows plugins and polyfills usedSee applied transformations.