Cheatsheet Babel
Compilador de JavaScript para compatibilidade com browsers antigos
Babel
19
cards encontrados
Categorias:
Versões:
Setup
Instalar
npm i -D @babel/core @babel/cli
npm i -D @babel/preset-env
# Com webpack:
npm i -D babel-loader
Pacotes essenciais.
Config mínima
// babel.config.json
{
"presets": [
["@babel/preset-env", {
"targets": "defaults"
}]
]
}
Configuração básica.
Com webpack
// webpack.config.js
module: {
rules: [{
test: /\.js$/,
exclude: /node_modules/,
use: 'babel-loader',
}]
}
Integrar com webpack.
Presets
@babel/preset-env
{
"presets": [[
"@babel/preset-env", {
"targets": "> 0.25%, not dead",
"useBuiltIns": "usage",
"corejs": 3
}
]]
}Preset principal (recomendado).
@babel/preset-react
npm i -D @babel/preset-react
{
"presets": [
["@babel/preset-react", {
"runtime": "automatic"
}]
]
}
Suporte a JSX.
@babel/preset-typescript
npm i -D @babel/preset-typescript
{
"presets": [
"@babel/preset-typescript"
]
}
Remover tipos TypeScript.
Targets (browserslist)
"targets": "defaults"
"targets": "> 1%, last 2 versions"
"targets": { "node": "18" }
"targets": { "chrome": "90" }
// ou .browserslistrc:
> 0.5%
last 2 versions
not dead
Definir browsers alvo.
Plugins
Plugins de proposal
@babel/plugin-proposal-decorators
@babel/plugin-proposal-pipeline-operator
@babel/plugin-transform-runtime
{
"plugins": [
"@babel/plugin-transform-runtime"
]
}
Features experimentais.
transform-runtime
npm i -D @babel/plugin-transform-runtime
npm i @babel/runtime
{
"plugins": [[
"@babel/plugin-transform-runtime",
{ "corejs": 3 }
]]
}
Evitar duplicação de helpers.
Plugins de sintaxe
@babel/plugin-syntax-dynamic-import
@babel/plugin-syntax-import-meta
@babel/plugin-proposal-class-properties
// Maioria já incluída no preset-env
Sintaxe específica.
Configuração
babel.config.js vs .babelrc
# babel.config.js → projeto inteiro
# .babelrc → só o pacote/diretório
# Monorepo: usar babel.config.js
# Biblioteca: usar .babelrc
Diferenças de scope.
Opções de config
{
"presets": [],
"plugins": [],
"sourceMaps": true,
"env": {
"test": {
"presets": [["preset-env",
{ "targets": { "node": "current" }}]]
}
}
}Config por ambiente.
Overrides
{
"overrides": [{
"test": ["./src/legacy/**/*.js"],
"presets": [[
"@babel/preset-env",
{ "targets": "ie 11" }
]]
}]
}Regras por ficheiro.
CLI
Comandos
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
Compilar com CLI.
Flags
--out-dir, -d # diretório output
--out-file, -o # ficheiro output
--watch, -w # modo watch
--source-maps # gerar source maps
--extensions # .js,.jsx,.ts
--ignore # padrões a ignorar
Opções de CLI.
Scripts npm
"scripts": {
"build": "babel src -d lib",
"dev": "babel src -d lib -w",
"clean": "rm -rf lib && babel src -d lib"
}Scripts de build.
Avançado
Polyfills (core-js)
npm i core-js@3
// useBuiltIns opções:
"usage" # importa só o necessário
"entry" # importa tudo no entry
false # sem polyfills (padrão)
Polyfills automáticos.
Com Jest
// babel.config.js
module.exports = {
presets: [
['@babel/preset-env',
{ targets: { node: 'current' }}],
],
};
Config para testes.
Debug e verbose
{
"presets": [[
"@babel/preset-env", {
"debug": true
}
]]
}
// Mostra plugins e polyfills usadosVer transformações aplicadas.