7.17.0 Lanzado: Modo 'v' de RegExp y ... ¡🥁 decoradores!
Esta página fue traducida por PageTurner AI (beta). No está respaldada oficialmente por el proyecto. ¿Encontraste un error? Reportar problema →
¡Acabamos de publicar Babel 7.17.0!
Tras años de iteraciones, reescrituras y ajustes, ¡parece que la propuesta de decoradores finalmente se ha estabilizado en un nuevo diseño! Esta versión incluye soporte tanto para análisis como transformación de la nueva propuesta.
También implementamos la propuesta de bandera v en RegExp y añadimos soporte de análisis para desestructuración de campos privados, ambas actualmente en Etapa 2. Por último, una nueva implementación experimental de @babel/register.
Puedes leer el registro de cambios completo en GitHub.
Si tú o tu empresa desean apoyar a Babel y la evolución de JavaScript, pero no saben cómo, pueden donarnos a través de nuestro Open Collective o GitHub Sponsors y, mejor aún, ¡trabajar directamente con nosotros implementando nuevas propuestas de ECMAScript! Como proyecto impulsado por voluntarios, dependemos del apoyo comunitario para financiar nuestros esfuerzos en atender a la amplia comunidad de usuarios de JavaScript. Contáctenos en team@babeljs.io si quieren discutir más detalles.
Destacados
Decoradores (#14004, #13681)
Tras recibir comentarios de desarrolladores JavaScript, creadores de motores y expertos en lenguajes, la propuesta de decoradores se reescribió considerando múltiples restricciones y objetivos. Colaboramos con el autor actual de la propuesta, @pzuraq, para implementar en Babel la nueva propuesta en Etapa 2.
La nueva implementación también admite decorar elementos privados de clase, así como la nueva sintaxis de "auto-accesores de clase":
@defineElement("button")
class Button {
@reactive accessor enabled = true; // class auto accessors
@event("onClick") #handleClick() { // decorator on a private method
console.log("clicked!");
}
}
Puedes habilitar la nueva propuesta pasando la opción "version": "2021-12" a @babel/plugin-proposal-decorators:
{
"plugins": [
["@babel/plugin-proposal-decorators", {
"version": "2021-12"
}]
]
}
Aunque la sintaxis de nuevos decoradores es compatible con la propuesta anterior, la semántica difiere: los decoradores escritos para Babel "legacy", Babel older-but-not-legacy o TypeScript no funcionarán con la nueva propuesta.
Si deseas ayudar a avanzar la propuesta, puedes probarla y dejar comentarios en su repositorio de GitHub.
Notación de conjuntos y propiedades de cadenas en RegExp (#14125)
Babel ahora admite la propuesta de notación de conjuntos y propiedades de cadenas en RegExp, que introduce tres nuevas características para expresiones regulares mediante una nueva bandera v:
-
Notación de conjuntos extendida, que permite calcular diferencia, intersección y unión de conjuntos de caracteres o cadenas
JavaScript/[\p{Decimal_Number}--[0-9]]/v; // Non-ASCII decimal digits
/[\p{ASCII}&&\p{Letter}]/v; // ASCII letters
/[[\p{ASCII}&&\p{Letter}]\p{Number}]/v; // ASCII letters, or any digit -
Propiedades de cadenas, que permiten usar escapes
\pcon propiedades de múltiples puntos de códigoJavaScript"Did you see the 👩🏿❤️💋👩🏾 emoji?".match(/\p{RGI_Emoji}/v). // ["👩🏿❤️💋👩🏾"] -
Cadenas de múltiples puntos de código en conjuntos, usando el nuevo escape
\qJavaScript/[\r\n\q{\r\n|NEWLINE}]/v; // Matches \r, \n, \r\n or NEWLINE
Puedes habilitar esta propuesta usando el plugin @babel/plugin-proposal-unicode-sets-regex:
{
"plugins": ["@babel/plugin-proposal-unicode-sets-regex"]
}
Babel depende de diferentes paquetes de terceros para transformar expresiones regulares: agradecemos a los mantenedores de regjsparser, regjsgen y regexpu-core ¡quienes dedicaron tiempo a revisar nuestras solicitudes de extracción!
Tokens de tema @@ y ^^ para tuberías estilo Hack (#13973)
Seguimos ayudando a los autores de la propuesta a evaluar diferentes tokens para la propuesta del operador de tubería: uno de los campeones, J. S. Choi, agregó soporte para dos nuevos tokens que puedes probar con la opción topicToken:
{
"plugins": [
["@babel/plugin-proposal-pipeline-operator", {
"proposal": "hack",
"topicToken": "^^" // or "@@"
}]
]
}
Puedes leer más sobre las variaciones soportadas en la documentación de @babel/plugin-proposal-pipeline-operator.
Reescriptura experimental de @babel/register (#13782)
Planeamos lanzar Babel 8 como un paquete ESM. Sin embargo, esto plantea un gran problema: ¿cómo cargarlo y ejecutarlo de manera síncrona en paquetes CommonJS?
Normalmente la mayoría de los consumidores de Babel pueden ejecutarlo asíncronamente, o al menos cargarlo asíncronamente. Esto no es cierto para @babel/eslint-parser (que integra el parser de Babel con ESLint) y @babel/register (que se usa para transpilar archivos Node.js sobre la marcha), donde necesitamos mover el análisis y transformación a un worker separado.
Babel 7.16.0 expone la nueva implementación experimental de @babel/register en @babel/register/experimental-worker: internamente ejecuta Babel asíncronamente, por lo que es compatible con archivos de configuración .mjs y con plugins Babel .mjs. Estará habilitada por defecto en Babel 8, y ya puedes usarla como reemplazo de @babel/register con algunas advertencias:
-
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 hay algunas mejoras que estamos explorando.
Ya lanzamos la nueva implementación experimental de @babel/eslint-parser en Babel 7.15.0, expuesta en @babel/eslint-parser/experimental-worker.