Cheatsheet Babel
Compilador de JavaScript para compatibilidade com browsers antigos
Babel
19
tarjetas encontradas
Categorías:
Versiones:
Setup
Instalar
npm i -D @babel/core @babel/cli
npm i -D @babel/preset-env
# Con webpack:
npm i -D babel-loader
Paquetes esenciales.
Config mínima
// babel.config.json
{
"presets": [
["@babel/preset-env", {
"targets": "defaults"
}]
]
}
Configuración básica.
Con webpack
// webpack.config.js
module: {
rules: [{
test: /\.js$/,
exclude: /node_modules/,
use: 'babel-loader',
}]
}
Integrar con 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"
}]
]
}
Soporte para JSX.
@babel/preset-typescript
npm i -D @babel/preset-typescript
{
"presets": [
"@babel/preset-typescript"
]
}
Eliminar tipos TypeScript.
Targets (browserslist)
"targets": "defaults"
"targets": "> 1%, last 2 versions"
"targets": { "node": "18" }
"targets": { "chrome": "90" }
// o .browserslistrc:
> 0.5%
last 2 versions
not dead
Definir navegadores objetivo.
Plugins
Plugins de proposal
@babel/plugin-proposal-decorators
@babel/plugin-proposal-pipeline-operator
@babel/plugin-transform-runtime
{
"plugins": [
"@babel/plugin-transform-runtime"
]
}
Features experimentales.
transform-runtime
npm i -D @babel/plugin-transform-runtime
npm i @babel/runtime
{
"plugins": [[
"@babel/plugin-transform-runtime",
{ "corejs": 3 }
]]
}
Evitar duplicación de helpers.
Plugins de sintaxis
@babel/plugin-syntax-dynamic-import
@babel/plugin-syntax-import-meta
@babel/plugin-proposal-class-properties
// La mayoría ya incluida en preset-env
Sintaxis específica.
Configuração
babel.config.js vs .babelrc
# babel.config.js → proyecto entero
# .babelrc → solo el paquete/directorio
# Monorepo: usar babel.config.js
# Biblioteca: usar .babelrc
Diferencias de scope.
Opciones de config
{
"presets": [],
"plugins": [],
"sourceMaps": true,
"env": {
"test": {
"presets": [["preset-env",
{ "targets": { "node": "current" }}]]
}
}
}Config por entorno.
Overrides
{
"overrides": [{
"test": ["./src/legacy/**/*.js"],
"presets": [[
"@babel/preset-env",
{ "targets": "ie 11" }
]]
}]
}Reglas por archivo.
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 con la CLI.
Flags
--out-dir, -d # directorio output
--out-file, -o # archivo output
--watch, -w # modo watch
--source-maps # generar source maps
--extensions # .js,.jsx,.ts
--ignore # patrones a ignorar
Opciones 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
// opciones de useBuiltIns:
"usage" # importa solo lo necesario
"entry" # importa todo en el entry
false # sin polyfills (por defecto)
Polyfills automáticos.
Con Jest
// babel.config.js
module.exports = {
presets: [
['@babel/preset-env',
{ targets: { node: 'current' }}],
],
};
Config para tests.
Debug y verbose
{
"presets": [[
"@babel/preset-env", {
"debug": true
}
]]
}
// Muestra plugins y polyfills usadosVer transformaciones aplicadas.