El estado de babel-eslint
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-eslintha 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-eslintes una dependencia directa en supackage.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-eslintrequiere 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-parserrequerirá@babel/corecomo 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-parservivirá en el monorepo principalbabel/babelcon otros paquetes de Babel. Esperamos que esto ayude a mitigar algunos de los problemas de sincronización quebabel-eslintha 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-eslintdurante 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
- Yarn
- pnpm
- Bun
npm uninstall babel-eslint babel-eslint-plugin
npm install --save-dev @babel/eslint-parser @babel/eslint-plugin
yarn remove babel-eslint babel-eslint-plugin
yarn add --dev @babel/eslint-parser @babel/eslint-plugin
pnpm remove babel-eslint babel-eslint-plugin
pnpm add --save-dev @babel/eslint-parser @babel/eslint-plugin
bun remove babel-eslint babel-eslint-plugin
bun add --dev @babel/eslint-parser @babel/eslint-plugin
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.