Saltar al contenido principal

Lanzamiento de la versión 7.27.0: mejor alineación con el ecosistema

· 3 min de lectura
Traducción Beta No Oficial

Esta página fue traducida por PageTurner AI (beta). No está respaldada oficialmente por el proyecto. ¿Encontraste un error? Reportar problema →

¡Babel 7.27.0 ya está aquí!

Esta versión no incluye características nuevas significativas, pero mejora la alineación del comportamiento de Babel con JavaScript estándar y otras herramientas.

El generador de código ahora imprimirá por defecto la sintaxis correcta de atributos de importación, sin requerir que los usuarios activen explícitamente una opción para ello.

También ajustamos el comportamiento de la opción rewriteImportExtensions de @babel/preset-typescript para corregir diferencias respecto a --rewriteRelativeImportExtensions de TypeScript.

Finalmente, actualizamos nuestro plugin de compatibilidad estree en @babel/parser para generar nodos AccessorProperty para propiedades de clase accessor foo = "val", introducidas por la propuesta de decoradores en etapa 3. Ten en cuenta que, por razones de compatibilidad heredada, @babel/parser solo genera un AST compatible con ESTree para características de clase cuando la opción classFeatures del plugin estree está habilitada.

Hay múltiples cambios que pueden beneficiar a autores de plugins: puedes leer el registro completo de cambios en GitHub.

Si tú o tu empresa quieren apoyar a Babel y la evolución de JavaScript, pero no están seguros de cómo, pueden donarnos en nuestro Open Collective y, aún mejor, trabajar directamente con nosotros en la implementación de nuevas propuestas de ECMAScript! Como proyecto impulsado por voluntarios, dependemos del apoyo de la comunidad para financiar nuestros esfuerzos en dar soporte a la amplia variedad de usuarios de JavaScript. ¡Contáctanos en team@babeljs.io si quieres conversar más!

Destacados

Ajustes en rewriteImportExtensions (#17118)

Babel 7.26.0 añadió soporte para import() dinámico al usar la opción rewriteImportExtensions de @babel/preset-typescript, para alinearse con la nueva opción rewriteRelativeImportExtensions de TypeScript.

Sin embargo, descubrimos una diferencia en el manejo de rutas no relativas: Babel reescribía import("/foo/bar/baz.ts") como import("/foo/bar/baz.js"), mientras TypeScript lo dejaba intacto. Como el objetivo de Babel es reflejar el comportamiento de TypeScript cuando es posible, consideramos esta diferencia un error que corregimos en Babel 7.27.0.

Impresión de atributos de importación por defecto (#16977)

Babel implementó inicialmente atributos de importación hace años, cuando la propuesta aún se llamaba "atributos de módulo" y tenía una sintaxis diferente:

import data from "./data.json" with type: "json";

Al implementar atributos de importación compatibles con estándares, mantuvimos el comportamiento existente del generador. Esto significa que al imprimir el siguiente AST:

ImportDeclaration {
specifiers: [],
source: StringLiteral("./data.json"),
attributes: [
ImportAttribute { key: Identifier("type"), value: StringLiteral("json") }
]
}

generábamos import "./data.json" with type: "json" en lugar de import "./data.json" with { type: "json" }.

@babel/generator ahora generará import "./data.json" with { type: "json" } para coincidir con la sintaxis estándar de JavaScript. Mantendrá la sintaxis antigua solo cuando:

  • La opción importAttributesKeyword esté configurada como "with-legacy"

  • El AST haya sido generado al analizar la sintaxis antigua, lo que define una propiedad .extra.deprecatedWithLegacySyntax: true en el nodo ImportDeclaration.