@babel/register
Esta página fue traducida por PageTurner AI (beta). No está respaldada oficialmente por el proyecto. ¿Encontraste un error? Reportar problema →
Una de las formas de usar Babel es mediante el gancho de require. Este gancho
se vinculará al require de Node y compilará archivos automáticamente
al vuelo. Es equivalente al coffee-script/register
de CoffeeScript.
Instalación
- npm
- Yarn
- pnpm
- Bun
npm install @babel/core @babel/register --save-dev
yarn add @babel/core @babel/register --dev
pnpm add @babel/core @babel/register --save-dev
bun add @babel/core @babel/register --dev
Uso
require("@babel/register");
Todos los archivos posteriores requeridos por Node con las extensiones .es6, .es, .jsx,
.mjs y .js serán transformados por Babel.
Debes incluir el polyfill por separado al usar características que lo requieran, como generadores.
Ignora node_modules por defecto
NOTA: Por defecto, todos los requerimientos a node_modules serán ignorados. Puedes
sobrescribir esto pasando una expresión regular de ignorado mediante:
require("@babel/register")({
// This will override `node_modules` ignoring - you can alternatively pass
// an array of strings to be explicitly matched or a regex / glob
ignore: [],
});
Especificación de opciones
require("@babel/register")({
// Array of ignore conditions, either a regex or a function. (Optional)
// File paths that match any condition are not compiled.
ignore: [
// When a file path matches this regex then it is **not** compiled
/regex/,
// The file's path is also passed to any ignore functions. It will
// **not** be compiled if `true` is returned.
function(filepath) {
return filepath !== "/path/to/es6-file.js";
},
],
// Array of accept conditions, either a regex or a function. (Optional)
// File paths that match all conditions are compiled.
only: [
// File paths that **don't** match this regex are not compiled
/my_es6_folder/,
// File paths that **do not** return true are not compiled
function(filepath) {
return filepath === "/path/to/es6-file.js";
},
],
// Setting this will remove the currently hooked extensions of `.es6`, `.es`, `.jsx`, `.mjs`
// and .js so you'll have to add them back if you want them to be used again.
extensions: [".es6", ".es", ".jsx", ".js", ".mjs"],
// Setting this to false will disable the cache.
cache: true,
});
Puedes pasar todas las demás opciones, incluyendo plugins y presets.
Ten en cuenta que los archivos de configuración también se cargarán y la configuración
programática se fusionará sobre las opciones del archivo de configuración. @babel/register no admite
ignore y only en archivos de configuración.
Variables de entorno
Por defecto, el CLI @babel/node y @babel/register guardarán una caché JSON en tu
directorio temporal.
Esto mejorará considerablemente el inicio y la compilación de tus archivos. Sin embargo, hay escenarios donde querrás cambiar este comportamiento y existen variables de entorno expuestas para permitírtelo.
BABEL_CACHE_PATH
Especifica una ubicación diferente para la caché.
BABEL_CACHE_PATH=/foo/my-cache.json babel-node script.js
BABEL_DISABLE_CACHE
Deshabilita la caché.
BABEL_DISABLE_CACHE=1 babel-node script.js
Compilación de plugins y presets sobre la marcha
@babel/register utiliza el sistema de ganchos require() de Node para compilar archivos
sobre la marcha cuando se cargan. Aunque esto es muy útil en general, significa
que pueden darse casos confusos donde el código dentro de un gancho require() provoca
más llamadas a require, creando un ciclo de dependencias. En el caso de Babel,
esto podría significar que durante el proceso en que Babel intenta compilar un
archivo del usuario, Babel podría terminar intentando compilarse a sí mismo mientras se carga.
Para evitar este problema, este módulo deshabilita explícitamente la compilación reentrante, es decir, la lógica de compilación de Babel no puede activar más compilaciones de otros archivos sobre la marcha. La desventaja es que si quieres definir un plugin o preset que se compile dinámicamente, el proceso se complica.
La clave es que tu propio código debe cargar primero el plugin/preset. Asumiendo que el plugin/preset carga todas sus dependencias por adelantado, lo que deberás hacer es:
require("@babel/register")({
// ...
});
require("./my-plugin");
Dado que es tu propio código el que activó la carga, y no la lógica interna de
@babel/register, esto debería compilar correctamente cualquier plugin/preset
que cargue de forma síncrona.
Implementación experimental de Babel 8
También puedes probar la nueva implementación experimental que estará habilitada por defecto en Babel 8 usando:
require("@babel/register/experimental-worker");
Internamente ejecuta Babel de forma asíncrona, por lo que es compatible con archivos de configuración .mjs. Ya puedes usarlo como reemplazo de @babel/register con algunas salvedades:
-
Si especificas opciones de
@babel/registerprogramáticamente (usandorequire("@babel/register")({ /* ... options */ })), debes asegurarte de que sean serializables. Esto significa que no puedes pasar funciones de plugin definidas en línea, sino que debes moverlas a un archivo separado./my-plugin.jso a un archivobabel.config.js. -
La nueva implementación sigue siendo experimental: debería tener las mismas características que la actual, pero pueden aparecer nuevos errores y regresiones.
Nota: @babel/register no admite la compilación de módulos ES nativos de Node.js sobre la marcha, ya que actualmente no existe una API estable para interceptar la carga de módulos ES.