Saltar al contenido principal

El estado de babel-eslint

· 5 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-eslint se ha movido a @babel/eslint-parser!

El pasado

Como capa de compatibilidad entre Babel y ESLint —dos proyectos mantenidos por equipos separados—, babel-eslint siempre ha sido un paquete difícil de mantener. Algunos desafíos que el equipo ha enfrentado al mantener babel-eslint:

  • babel-eslint ha sido mantenido históricamente por el equipo de Babel, y garantizar que las reglas principales de ESLint (que se publican cada dos semanas) funcionen con sintaxis experimental es una tarea monumental.

  • La representación interna de AST en Babel difiere de ESTree, la especificación que usa ESLint. Por ello, la compatibilidad requiere que el parser de Babel incluya un plugin que genere ASTs compatibles con ESTree.

  • Mientras Babel habilita sintaxis experimental, ESLint solo admite sintaxis que alcanza la Etapa 4. Esto significa que sus reglas no están diseñadas para sintaxis en Etapa 3 o inferior. Además, ESLint ha estado bloqueado por la finalización de ESTree, ampliando la discrepancia en la sintaxis soportada.

  • La versión del parser de Babel que usa babel-eslint es una dependencia directa en su package.json, y los plugins habilitados están codificados de forma rígida. Esto genera desajustes entre versiones y características habilitadas al compilar vs. lintear, causando confusión y problemas difíciles de depurar.

  • babel-eslint requiere actualizaciones para cambios en ambos proyectos, frecuentemente desincronizado con uno u otro.

Estos desafíos han hecho que babel-eslint requiera más recursos de los disponibles, resultando en que babel-eslint no reciba la atención que requiere un proyecto ampliamente usado (6M descargas/semana al escribir esto).

El presente

Con la próxima iteración de babel-eslint, hemos decidido publicar el paquete bajo un nuevo nombre: @babel/eslint-parser. Para mitigar los desafíos anteriores:

  • @babel/eslint-parser requerirá @babel/core como dependencia peer y usará sus APIs para aplicar tu configuración de Babel. Así, la misma versión y configuración se usarán para compilar y lintear, alineado con nuestro enfoque en el ecosistema Babel.

  • @babel/eslint-parser vivirá en el monorepo principal babel/babel con otros paquetes de Babel. Esperamos que esto ayude a mitigar algunos de los problemas de sincronización que babel-eslint ha tenido en el pasado y nos permita lintear el repo con el código fuente más reciente en GitHub, acortando el ciclo de retroalimentación sobre cómo los cambios en Babel afectan el linteo.

  • ESTree —la especificación AST que sigue ESLint— ha reactivado su desarrollo, con participación activa del equipo de Babel. Esto facilitará compartir aprendizajes sobre representación AST de sintaxis experimental e integrar herramientas.

  • Kai Cataldo ha estado colaborando con babel-eslint durante varios años y, como mantenedor de ambos proyectos (Babel y ESLint), está en una posición única para centrarse en la interoperabilidad de estas herramientas. Durante los últimos meses, ha trabajado en los cambios de código mencionados anteriormente y continuará dando soporte a los nuevos paquetes tras su lanzamiento.

El futuro

Creemos que estos paquetes están listos para su lanzamiento. Debido a todas las integraciones y proyectos involucrados (Babel, ESLint, Prettier, frameworks, varios plugins, integraciones en editores de texto, herramientas CLI, etc.), estamos seguros de que habrá aspectos que necesitarán corrección, y planeamos iterar rápidamente.

Ten en cuenta que @babel/eslint-parser dependerá de @babel/core como dependencia peer, y este paquete debe estar presente en los node_modules de tu proyecto.

Una vez que hayas verificado que @babel/core está instalado, puedes ejecutar los siguientes comandos para migrar desde babel-eslint y babel-eslint-plugin hacia los nuevos paquetes:

npm uninstall babel-eslint babel-eslint-plugin
npm install --save-dev @babel/eslint-parser @babel/eslint-plugin
.eslintrc.js
module.exports = {
--- parser: "babel-eslint",
+++ parser: "@babel/eslint-parser"
plugins: [
--- "babel"
+++ "@babel
]
};

@babel/eslint-parser espera un archivo de configuración estándar de Babel (.babelrc o babel.config.js). Para casos donde los usuarios no deseen usar un archivo de configuración de Babel o ejecuten Babel mediante otra herramienta (como Webpack con babel-loader), @babel/eslint-parser también permite aplicar la configuración de Babel mediante tu configuración de ESLint. Consulta la opción babelOptions para más detalles.

Avanzando Juntos

Nuestro objetivo a corto plazo con estos cambios es facilitar el mantenimiento de @babel/eslint-parser y hacer que el análisis de código transpilado con Babel mediante ESLint sea más sencillo y confiable. ¡Agradeceríamos tu ayuda en este esfuerzo! Las contribuciones en GitHub y las donaciones económicas son fundamentales para optimizar esta integración para la comunidad.