Vai al contenuto principale

7.19.0 Rilasciato: Decoratori Stage 3 e nuove funzionalità per le RegExp!

· Lettura di 4 min
Traduzione Beta Non Ufficiale

Questa pagina è stata tradotta da PageTurner AI (beta). Non ufficialmente approvata dal progetto. Hai trovato un errore? Segnala problema →

Abbiamo appena pubblicato Babel 7.19.0!

Questa versione aggiorna la nostra implementazione della proposta dei decoratori, che ha raggiunto lo Stage 3 a marzo. Include inoltre il supporto per la nuova proposta dei gruppi di cattura con nome duplicato nelle espressioni regolari.

Puoi leggere l'intero changelog su GitHub.

Se tu o la tua azienda volete supportare Babel e l'evoluzione di JavaScript, ma non sapete come, potete donare sul nostro Open Collective e, ancora meglio, collaborare direttamente con noi all'implementazione di nuove proposte ECMAScript! Essendo un progetto gestito da volontari, dipendiamo dal supporto della comunità per finanziare i nostri sforzi nel supportare la vasta gamma di utenti JavaScript. Contattaci a team@babeljs.io per discutere insieme!

Novità principali

Nuovi valori predefiniti

Considerata la stabilizzazione delle proposte decoratori e Record e Tuple, abbiamo impostato nuovi valori predefiniti per le opzioni dei loro plugin del parser:

  • decorators/@babel/plugin-proposal-decorators: decoratorsBeforeExport ora è predefinito a false;

  • recordAndTuple/@babel/plugin-proposal-record-and-tuple: l'opzione syntaxType ora è predefinita a hash.

Queste opzioni verranno rimosse in Babel 8.

Decoratori Stage 3 (#14836)

La proposta dei decoratori è stata promossa allo Stage 3 con alcune modifiche minori ma significative. Puoi abilitare la nuova versione usando l'opzione "version": "2022-03" di @babel/plugin-proposal-decorators:

babel.config.json
{
"plugins": [
["@babel/plugin-proposal-decorators", {
"version": "2022-03"
}]
]
}

Se stai migrando dalla versione 2021-12, i seguenti cambiamenti breaking potrebbero riguardarti:

  • il metodo initialize dell'oggetto restituito dai decoratori di accesso è stato rinominato in init;

  • le proprietà isPrivate e isStatic del parametro context ricevuto dai decoratori (il secondo) sono state rinominate in private e static;

  • il parametro context ora include sempre una proprietà access, indipendentemente dal tipo di elemento decorato;

  • il supporto per i metadati (getMetadata/setMetadata) è stato rimosso e rinviato a una futura proposta;

  • i decoratori in stile @(expression)() non sono più consentiti: devi usare @(expression());

  • i decoratori vengono applicati nel seguente ordine, anziché in un'unica passata:

    1. decoratori di metodi statici
    2. decoratori di metodi del prototipo
    3. decoratori di campi statici
    4. decoratori di campi d'istanza
    5. decoratori di classe.

Se stai migrando da una versione precedente della proposta, ti consigliamo di leggere il README completo. 😉

💡 TypeScript prevede di implementare questa versione della proposta. Dopo quasi un decennio, sarà possibile scrivere decoratori senza preoccuparsi se verranno compilati da Babel o tsc!

Gruppi di acquisizione con nome duplicati in RegExp (#14805)

Babel ora supporta la proposta dei gruppi di acquisizione con nome duplicati in RegExp, che consente di riutilizzare lo stesso nome di gruppo in rami alternativi delle espressioni regolari:

JavaScript
const dateRE = /(?<year>\d\d\d\d)-(?<month>\d\d)|(?<month>\d\d)-(?<year>\d\d)/;

console.log("2022-12".match(dateRE).groups); // { year: "2022", month: "12" }
console.log("12-2022".match(dateRE).groups); // { year: "2022", month: "12" }

Puoi abilitare questa proposta utilizzando il plugin @babel/plugin-proposal-duplicate-named-capturing-groups-regex:

babel.config.json
{
"plugins": ["@babel/proposal-duplicate-named-capturing-groups-regex"]
}

Babel si affida a diversi pacchetti di terze parti per trasformare le espressioni regolari: questo è possibile grazie ai maintainer di regjsparser, regjsgen e regexpu-core che hanno dedicato tempo a revisionare le nostre pull request!