L'état de babel-eslint
Cette page a été traduite par PageTurner AI (bêta). Non approuvée officiellement par le projet. Vous avez trouvé une erreur ? Signaler un problème →
babel-eslint devient @babel/eslint-parser !
Le passé
Agissant comme couche de compatibilité entre Babel et ESLint – deux projets maintenus par des équipes distinctes – babel-eslint a toujours été difficile à maintenir. Voici quelques-uns des défis auxquels l'équipe a été confrontée lors de la maintenance de babel-eslint :
-
babel-eslinta historiquement été maintenu par l'équipe Babel, et garantir que les règles de base d'ESLint (qui sont publiées toutes les deux semaines) fonctionnent avec la syntaxe expérimentale représente une tâche monumentale. -
La représentation AST interne de Babel diffère d'ESTree, la spécification utilisée par ESLint. La compatibilité nécessite donc un plugin dans le parseur Babel pour produire des AST conformes à ESTree.
-
Si Babel permet d'utiliser une syntaxe expérimentale, ESLint ne prend en charge que les syntaxes ayant atteint le Stage 4. Les règles ESLint ne sont donc pas conçues pour fonctionner avec des syntaxes de Stage 3 ou inférieur. De plus, la finalisation retardée de la spécification ESTree a accentué les différences de syntaxe supportées.
-
La version du parseur Babel utilisée par
babel-eslintest une dépendance directe dans sonpackage.json, avec des plugins codés en dur. Cela crée des risques d'incompatibilité entre les versions et fonctionnalités activées lors de la compilation et du linting, générant confusion et bugs complexes à résoudre. Corriger ce point bénéficiera autant aux mainteneurs qu'aux utilisateurs. -
babel-eslintdoit être mis à jour pour suivre les évolutions des deux projets amont, ce qui l'a souvent laissé désynchronisé.
Ces défis cumulés ont conduit à ce que babel-eslint exige plus de ressources que l'équipe n'en dispose, ce qui prive babel-eslint (6M téléchargements hebdomadaires à ce jour) de l'attention nécessaire pour rester à jour.
La situation actuelle
Pour la nouvelle itération de babel-eslint, nous publions le package sous le nom @babel/eslint-parser. Pour résoudre les problèmes précédents :
-
@babel/eslint-parsernécessitera@babel/corecomme dépendance peer et utilisera les APIs de Babel pour lire et appliquer votre configuration. Ainsi, la même version de Babel avec les mêmes paramètres servira à la compilation et au linting, conformément aux pratiques recommandées dans l'écosystème Babel. -
@babel/eslint-parserrésidera dans le monorepo principalbabel/babelavec les autres packages Babel. Nous espérons que cela aidera à atténuer certains des problèmes de synchronisation quebabel-eslinta connus par le passé et nous permettra de linter le dépôt avec le code source le plus récent sur GitHub, réduisant le délai de feedback sur la manière dont les changements dans Babel affectent le linting. -
ESTree – la spécification AST suivie par ESLint – est redevenue active, avec la participation de l'équipe Babel. Nous pourrons ainsi partager nos découvertes sur la représentation AST des syntaxes expérimentales et faciliter l'intégration entre outils.
-
Kai Cataldo, contributeur historique de
babel-eslintet mainteneur des deux projets, occupe une position unique pour garantir l'interopérabilité. Ces derniers mois, il a implémenté les changements techniques mentionnés et continuera à supporter les nouveaux packages après leur publication.
L'avenir
Nous estimons que ces paquets sont prêts à être publiés. Compte tenu de toutes les intégrations et projets impliqués (Babel, ESLint, Prettier, frameworks, divers plugins, intégrations d'éditeurs de texte, outils en ligne de commande, etc.), nous sommes certains qu'il y aura des éléments à corriger, et nous prévoyons d'itérer rapidement.
Veuillez noter que @babel/eslint-parser dépendra de @babel/core en tant que dépendance peer, et ce paquet doit être présent dans le dossier node_modules de votre projet.
Une fois que vous avez vérifié que @babel/core est installé, vous pouvez exécuter les commandes suivantes pour migrer de babel-eslint et babel-eslint-plugin vers les nouveaux paquets :
- 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 s'attend à un fichier de configuration Babel standard (.babelrc ou babel.config.js). Dans les cas où les utilisateurs ne souhaiteraient pas utiliser de fichier de configuration Babel ou exécuteraient Babel via un autre outil (comme Webpack avec babel-loader), @babel/eslint-parser prend également en charge l'application de la configuration Babel via votre configuration ESLint. Consultez l'option babelOptions pour plus de détails.
Aller de l'avant ensemble
Notre objectif à court terme, en apportant les modifications décrites ci-dessus, est de faciliter la maintenance de @babel/eslint-parser et de rendre le linting du code compilé par Babel avec ESLint plus simple et plus fiable. Nous apprécierions votre aide dans cette entreprise ! Les contributions sur GitHub et les dons financiers contribuent grandement à nous aider à faire de cette intégration la meilleure possible pour la communauté.