7.28.0 Rilasciato: `babel.config.ts`, gestione esplicita delle risorse e proposta discard binding
Questa pagina è stata tradotta da PageTurner AI (beta). Non ufficialmente approvata dal progetto. Hai trovato un errore? Segnala problema →
Babel 7.28.0 è uscito!
Questa versione include il supporto per babel.config.ts e babel.config.mts, la funzionalità ES2026 Explicit Resource Management, la proposta discard binding e l'opzione sourceType: "commonjs".
Puoi leggere l'intero changelog su GitHub. Se stai già utilizzando la beta di Babel 8, tutte le nuove funzionalità della 7.28.0 sono incluse in v8.0.0-beta.1.
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, ancor meglio, collaborare direttamente con noi all'implementazione di nuove proposte ECMAScript! Essendo un progetto gestito da volontari, contiamo sul supporto della comunità per finanziare i nostri sforzi nell'assistere la vasta gamma di utenti JavaScript. Contattaci a team@babeljs.io per discutere ulteriormente!
Novità principali
Supporto nativo per babel.config.ts e babel.config.mts (#17392)
Babel supporta ora nativamente babel.config.ts e babel.config.mts. Raccomandiamo di utilizzare Node.js 24 per i migliori risultati.
Se stai utilizzando Babel 8.0.0-beta.1, puoi importare le tipizzazioni direttamente da @babel/core e utilizzarle nella tua configurazione di Babel:
// Requires Babel 8.0.0-beta.1 or above
import type { ConfigAPI, InputOptions } from "@babel/core";
export default function babelConfig(api: ConfigAPI): InputOptions {
return {
assumptions: {
noDocumentAll: true
},
presets: [
[
"@babel/preset-env",
{
targets: {
node: "current",
},
},
],
"@babel/preset-typescript",
],
};
}
Gestione esplicita delle risorse abilitata di default (#17346, #17355)
{
using handlerSync = openSync();
await using handlerAsync = await openAsync();
// handlerSync and handlerAsync will be disposed when the block exits
}
La gestione esplicita delle risorse, approvata condizionatamente per lo Stage 4 durante l'incontro TC39 di maggio 2025, è ora abilitata di default in @babel/preset-env e @babel/parser.
Se utilizzavi il plugin @babel/plugin-proposal-explicit-resource-management insieme a @babel/preset-env, ora puoi rimuoverlo dalla configurazione.
Se utilizzavi il plugin parser explicitResourceManagement, puoi rimuoverlo dalla configurazione.
Discard binding (#17276)
Babel supporta la trasformazione della proposta discard binding. Ora puoi usare il binding void per indicare variabili o parametri non utilizzati:
{
using void = new AcquireLock(mutex);
// The mutex lock will be automatically disposed when the block exits
}
// A customized JSON serializer with bigint support
// The first parameter of the replacer is unused
JSON.stringify(input, (void, value) => {
if (typeof value === "bigint") {
return value.toString();
} else {
return value.toJSON();
}
});
// Get a clone of the input object without property `z`
const { z: void, ...obj } = { x: 1, y: 2, z: 3 };
obj; // { x: 1, y: 2 }
Puoi abilitarla aggiungendo il plugin @babel/plugin-proposal-discard-binding alla configurazione di Babel.
export default {
plugins: [
["@babel/plugin-proposal-discard-binding", { syntaxType: "void" }]
]
}
Nota che la proposta potrebbe ancora cambiare sintassi: pertanto l'opzione syntaxType è obbligatoria e attualmente accetta solo il valore "void".
sourceType: "commonjs" (#17390)
La modalità "commonjs" indica che il codice dovrebbe essere eseguito in un ambiente CommonJS come Node.js. È simile alla modalità "script" ma consente dichiarazioni return, new.target e using/await using al top-level.
export default {
// Specify commonjs sourceType for all `*.cjs` sources
overrides: [
{
test: "*.cjs",
sourceType: "commonjs"
}
]
}
Si consiglia di utilizzare sourceType: "commonjs" quando si impiega sintassi specifica di CommonJS, e sourceType: "script" quando si scrivono tag <script> non modulo.