Lo stato di babel-eslint
Questa pagina è stata tradotta da PageTurner AI (beta). Non ufficialmente approvata dal progetto. Hai trovato un errore? Segnala problema →
babel-eslint è stato spostato in @babel/eslint-parser!
Il passato
Esistendo come livello di compatibilità tra Babel ed ESLint – due progetti mantenuti da team separati – babel-eslint è stato fin dall'inizio un pacchetto complesso da mantenere. Alcune delle sfide affrontate dal team durante la manutenzione di babel-eslint:
-
Storicamente
babel-eslintè stato mantenuto dal team di Babel, e garantire che le regole core di ESLint (rilasciate ogni due settimane) funzionino con sintassi sperimentali è un compito monumentale. -
La rappresentazione AST interna di Babel differisce da ESTree, la specifica AST utilizzata da ESLint. Di conseguenza, la compatibilità con ESLint richiede che il parser di Babel abbia un plugin che produca AST compatibili con ESTree.
-
Mentre Babel abilita l'uso di sintassi sperimentali, il core di ESLint supporta la sintassi solo quando raggiunge lo Stage 4 e viene finalizzata nelle specifiche. Ciò significa che le regole core di ESLint non sono progettate per funzionare con sintassi allo Stage 3 o inferiore. Inoltre, ESLint è stato bloccato dalla finalizzazione della specifica ESTree, portando a una discrepanza ancora maggiore nella sintassi supportata dai due progetti.
-
La versione del parser di Babel su cui
babel-eslintsi basa è una dipendenza diretta nel suopackage.jsone i plugin che abilita sono hardcoded, portando a una potenziale mancata corrispondenza nelle versioni e nelle funzionalità linguistiche abilitate tra compilazione e linting. Storicamente ciò ha causato molta confusione e problemi difficili da debug, e riteniamo che risolvere questo problema sia un grande vantaggio sia per i maintainer che per gli utenti finali. -
babel-eslintdeve essere aggiornato per gestire i cambiamenti in entrambi i progetti upstream, ed è spesso risultato non sincronizzato con uno o l'altro.
Le sfide sopra descritte hanno portato babel-eslint a richiedere più risorse di quelle a disposizione del team, con il risultato che babel-eslint non riceve l'attenzione che un progetto ampiamente utilizzato (6 milioni di download settimanali al momento della stesura) richiede per rimanere aggiornato.
Il presente
Con la prossima iterazione di babel-eslint, abbiamo deciso di pubblicare il pacchetto con un nuovo nome: @babel/eslint-parser. Per alleviare alcune delle sfide discusse sopra, stiamo implementando le seguenti modifiche:
-
@babel/eslint-parserrichiederà@babel/corecome peer dependency e utilizzerà le API core di Babel per leggere e applicare la tua configurazione Babel. Ciò significa che la stessa versione di Babel con le stesse impostazioni verrà utilizzata sia per la compilazione che per il linting. Questo è coerente con quanto raccomandiamo e facciamo con altri pacchetti nell'ecosistema Babel. -
@babel/eslint-parserrisiederà nel monorepo principalebabel/babelinsieme ad altri pacchetti Babel. Speriamo che questo aiuti a mitigare alcuni dei problemi di sincronizzazione chebabel-eslintha avuto in passato e ci permetta di eseguire il linting del repository con il codice sorgente più recente su GitHub, abbreviando il feedback loop su come i cambiamenti in Babel influenzano il linting. -
ESTree - la specifica AST seguita da ESLint - è diventata recentemente nuovamente attiva, e il team di Babel è ora coinvolto attivamente nel progetto. Ciò ci consentirà di condividere ciò che apprendiamo sulla rappresentazione AST della sintassi sperimentale e di facilitare l'integrazione tra gli strumenti.
-
Kai Cataldo ha contribuito a
babel-eslintper diversi anni e, in qualità di maintainer sia di Babel che di ESLint, è in una posizione unica per concentrarsi sull'interoperabilità di questi due strumenti. Negli ultimi mesi ha lavorato alle modifiche al codice discusse sopra e continuerà a supportare i nuovi pacchetti una volta rilasciati.
Il futuro
Riteniamo che questi pacchetti siano pronti per il rilascio. Data la complessità delle integrazioni e dei progetti coinvolti (Babel, ESLint, Prettier, framework, vari plugin, integrazioni con editor di testo, strumenti da riga di comando, ecc.), siamo certi che emergeranno aspetti da correggere e contiamo di iterare rapidamente.
Nota bene: @babel/eslint-parser richiederà @babel/core come dipendenza peer e questo pacchetto deve essere presente nella directory node_modules del tuo progetto.
Dopo aver verificato l'installazione di @babel/core, puoi eseguire i seguenti comandi per migrare da babel-eslint e babel-eslint-plugin ai nuovi pacchetti:
- 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 si aspetta un file di configurazione Babel standard (.babelrc o babel.config.js). Per casi in cui gli utenti preferiscano non usare un file di configurazione Babel o eseguano Babel tramite altri strumenti (come Webpack con babel-loader), @babel/eslint-parser supporta anche l'applicazione della configurazione Babel tramite la configurazione ESLint. Consulta l'opzione di configurazione babelOptions per maggiori dettagli.
Avanti insieme
Il nostro obiettivo a breve termine con questi cambiamenti è semplificare la manutenzione di @babel/eslint-parser e rendere più agevole e affidabile il linting del codice compilato con Babel tramite ESLint. Gradiremmo molto il tuo contributo in questo sforzo! I contributi su GitHub e le donazioni finanziarie ci aiutano enormemente a perfezionare questa integrazione per la comunità.