7.27.0 Rilasciato: migliore allineamento con l'ecosistema
Questa pagina è stata tradotta da PageTurner AI (beta). Non ufficialmente approvata dal progetto. Hai trovato un errore? Segnala problema →
Babel 7.27.0 è uscito!
Questa release non include nuove funzionalità significative, ma allinea meglio il comportamento di Babel con JavaScript standard e altri strumenti.
La stampante di codice ora produrrà per impostazione predefinita la sintassi corretta degli import attributes, senza richiedere agli utenti di abilitare esplicitamente un'opzione.
Abbiamo inoltre modificato il comportamento dell'opzione rewriteImportExtensions di @babel/preset-typescript, per correggere alcune differenze rispetto a --rewriteRelativeImportExtensions di TypeScript.
Infine, abbiamo aggiornato il nostro plugin di compatibilità estree in @babel/parser per generare nodi AccessorProperty per le proprietà di classe accessor foo = "val", introdotte dalla proposta di decorators allo stage 3. Nota che, per motivi di compatibilità legacy, @babel/parser genera un AST compatibile con ESTree per le funzionalità delle classi solo quando l'opzione classFeatures del plugin estree è abilitata.
Sono presenti diverse modifiche che potrebbero interessare gli autori di plugin: 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
Modifiche a rewriteImportExtensions (#17118)
Babel 7.26.0 ha aggiunto il supporto per import() dinamico quando si utilizza l'opzione rewriteImportExtensions di @babel/preset-typescript, per allinearsi alla nuova opzione rewriteRelativeImportExtensions di TypeScript.
Tuttavia, abbiamo riscontrato una differenza nella gestione dei percorsi non relativi: Babel riscriveva import("/foo/bar/baz.ts") in import("/foo/bar/baz.js"), mentre TypeScript lo lasciava invariato. Poiché l'obiettivo di Babel è rispecchiare il comportamento di TypeScript quando possibile, consideriamo questa differenza un bug che risolviamo in Babel 7.27.0.
Stampa degli import attributes di default (#16977)
Babel ha implementato inizialmente gli import attributes anni fa, quando la proposta si chiamava ancora "module attributes" e aveva una sintassi diversa:
import data from "./data.json" with type: "json";
Quando abbiamo rilasciato gli import attributes conformi agli standard, abbiamo mantenuto il comportamento esistente del generatore. Ciò significa che quando si stampa il seguente AST:
ImportDeclaration {
specifiers: [],
source: StringLiteral("./data.json"),
attributes: [
ImportAttribute { key: Identifier("type"), value: StringLiteral("json") }
]
}
generavamo import "./data.json" with type: "json" invece di import "./data.json" with { type: "json" }.
@babel/generator ora genererà import "./data.json" with { type: "json" } per corrispondere alla sintassi JavaScript standard. Continuerà a produrre la vecchia sintassi quando:
-
L'opzione
importAttributesKeywordè impostata su"with-legacy" -
L'AST è stato generato analizzando la vecchia sintassi, il che definisce una proprietà
.extra.deprecatedWithLegacySyntax: truesul nodoImportDeclaration.