7.3.0 Rilasciato: Gruppi di acquisizione con nome, accessori di istanza privati e pipeline intelligenti
Questa pagina è stata tradotta da PageTurner AI (beta). Non ufficialmente approvata dal progetto. Hai trovato un errore? Segnala problema →
Dopo oltre 80 commit, è qui l'ultima release minore di Babel!
Questa versione include il supporto per i gruppi di acquisizione con nome nelle espressioni regolari, gli accessori di istanza privati, l'operatore pipeline intelligente e una serie di miglioramenti al parsing di TypeScript. Puoi leggere l'intero changelog su GitHub.
Un ringraziamento speciale a @jamesgeorge007 e @armano2 per il loro primo PR!
Bloomberg continua a sponsorizzare l'implementazione delle nuove funzionalità per le classi in Babel: dopo averci fornito i campi privati statici e i metodi di istanza privati, hanno appena implementato i getter e setter di istanza privati.
Un altro riconoscimento va al Progetto AMP, che ha incrementato il supporto a Babel a $24k/anno diventando Base Support Sponsor.
Se tu o la tua azianda volete supportare Babel e l'evoluzione di JavaScript ma non sapete come, potete donare su OpenCollective o, meglio ancora, collaborare direttamente con noi all'implementazione delle nuove proposte ECMAScript! Essendo un progetto guidato da volontari, dipendiamo dal supporto della comunità sia per finanziare i nostri sforzi nell'assistere la vasta gamma di utenti JavaScript, sia per prendere piena proprietà del codice.
Accessori di istanza privati (getter e setter) (#9101)
class Person {
#firstname = "Babel";
#lastname = "JS";
get #name() {
return this.#firstname + " " + this.#lastname;
}
sayHi() {
alert(`Hi, ${this.#name}!`);
}
}
Grazie a Tim (Bloomberg) per aver implementato questa proposta!
Puoi testare questa nuova funzionalità aggiungendo @babel/plugin-proposal-private-methods alla tua configurazione (se non l'hai già fatto da Babel 7.2.0) o abilitando il preset stage-3 nel repl online.
Il supporto alle funzionalità private delle classi è quasi completo!
| Class Private | Instance | Static |
|---|---|---|
Fields class A { #a = 1} | 7.0.0 | 7.1.0 |
Methods class A { #a() {} } | 7.2.0 | ✖ |
Accessors class A { get #a() {} } | 7.3.0 | ✖ |
Operatore pipeline intelligente (#9179)
Babel implementa più varianti di questa proposta per aiutare TC39 a testare e raccogliere feedback dalla comunità. Come per tutte le proposte, aspettatevi cambiamenti futuri.
In Babel 7.2.0 abbiamo introdotto il supporto per il parsing della proposta dello Smart Pipeline Operator. Grazie al lavoro di Thiago Arrais, ora puoi trasporlo in ECMAScript standard e provarlo!
Attualmente supportiamo solo la proposta principale, nessuna delle funzionalità aggiuntive. Inoltre, non supportiamo ancora yield e await nelle pipeline.
name
|> # || throw new TypeError()
|> doubleSay(#, ', ')
|> capitalize
|> # + '!'
|> new User.Message(#)
|> stream.write(#, { sync: true })
|> console.log;
Puoi abilitarlo nel tuo progetto utilizzando il plugin @babel/plugin-proposal-pipeline-operator con l'opzione proposal: "smart":
{
"plugins": [
["@babel/plugin-proposal-pipeline-operator", { "proposal": "smart" }]
]
}
In precedenza, la proposta "minimal" era stata aggiunta in [v7.0.0-beta.3] tramite #6335
Gruppi di cattura con nome (#7105)
let stringRe = /(?<quote>"|')(?<contents>.*?)\k<quote>/;
let { contents } = `"foo bar"`.match(stringRe);
Il supporto per la più grande funzionalità di ECMAScript 2018 mancante in Babel è finalmente qui! In precedenza, un supporto parziale per i gruppi con nome era disponibile tramite l'ottimo plugin della community babel-plugin-transform-modern-regexp di Dmitry Soshnikov. Abbiamo anche coordinato gli sforzi con core-js per fornire un supporto completo con il nuovo pacchetto @babel/plugin-transform-named-capturing-groups-regex.
Anche @babel/preset-env è stato aggiornato per includere questa funzionalità, quindi molti di voi potranno usarla senza apportare alcuna modifica!
Nota che le funzionalità runtime (ad esempio la proprietà groups) funzionano solo nei browser con supporto adeguato per le espressioni regolari ES6. Se devi supportare ambienti più vecchi, puoi includere un polyfill per i metodi di RegExp.
Aggiornamenti TypeScript (#9302, #9309)
Grazie al lavoro di Armano su @babel/parser e di Henry/Brian su @babel/generator (hai visto la live stream?), ora supportiamo let x: typeof import('./x');, aggiunto in TypeScript 2.9. Ora supportiamo anche la parola chiave per il tipo bigint, aggiunta in TypeScript 3.2.
babel-eslint v11.0.0-beta.0: Rilevamento Automatico della Sintassi Leggendo la Configurazione (babel/babel-eslint#711)
Grazie a Kai (membro anche del TSC di ESLint) per aver completato questo lavoro!
Fino ad ora, babel-eslint abilitava manualmente tutti i plugin di sintassi (con l'elenco che diventava rapidamente obsoleto). Ciò significava anche che poteva analizzare sintassi che un'istanza configurata di Babel non consentiva al momento della compilazione. Ora richiediamo @babel/core come peerDependency e presupponiamo che esista una configurazione Babel quando si utilizza babel-eslint, e usiamo quella stessa configurazione per modificare se stesso (rendendo questa una modifica breaking). Questa modifica dovrebbe rendere la manutenzione del modulo stesso più gestibile e riutilizzare la configurazione di Babel, un'ipotesi ragionevole per un utente che utilizza babel-eslint.
Puoi aiutarci verificando se questa versione beta funziona per il tuo progetto 🙂