Aller au contenu principal

7.26.0 publié : fonctionnalités de stage 4 activées par défaut et nouveau générateur de code expérimental

· 4 min de lecture
Traduction Bêta Non Officielle

Cette page a été traduite par PageTurner AI (bêta). Non approuvée officiellement par le projet. Vous avez trouvé une erreur ? Signaler un problème →

Babel 7.26.0 vient d'être publié !

Il active par défaut le support de deux propositions ECMAScript devenues standards lors de la dernière réunion TC39, les attributs d'import et les modificateurs d'expressions régulières en ligne, ainsi que l'analyse des énumérations Flow.

Babel permet désormais aussi aux plugins de fournir des hooks pre/post asynchrones, et propose un [mode expérimental](TODO: Link) pour préserver les positions des tokens lors de la génération du code transformé.

Vous pouvez consulter le changelog complet sur GitHub.

Si vous ou votre entreprise souhaitez soutenir Babel et l'évolution de JavaScript sans savoir comment contribuer, vous pouvez nous faire un don via notre Open Collective ou, mieux encore, collaborer directement avec nous à l'implémentation de nouvelles propositions ECMAScript ! En tant que projet géré par des bénévoles, nous dépendons du soutien communautaire pour financer nos efforts visant à accompagner la diversité des utilisateurs JavaScript. Contactez-nous à team@babeljs.io pour en discuter !

Principales fonctionnalités

Modificateurs RegExp en ligne (#16692)

Les modificateurs d'expressions régulières en ligne permettent d'activer ou désactiver les flags i/m/s sur une partie spécifique d'une regex. Par exemple, /hello (?i:world)/ correspond à toute chaîne contenant "hello " tel quel, suivie de "world" avec n'importe quelle casse : hello world et hello WoRlD correspondent, contrairement à Hello world.

Cette proposition a atteint le Stage 4 lors de la réunion TC39 d'octobre 2024 et sera incluse dans la prochaine version du standard JavaScript. @babel/preset-env transpilera désormais automatiquement cette fonctionnalité selon vos cibles de compilation, vous permettant de retirer @babel/plugin-proposal-regexp-modifiers de votre configuration.

Si vous devez encore explicitement référencer ce plugin, il a été renommé @babel/plugin-transform-regexp-modifiers puisque la proposition est désormais une fonctionnalité standard du langage.

Attributs d'import (#16579)

La proposition d'attributs d'import a également atteint le Stage 4 lors de la réunion TC39 d'octobre 2024. Elle permet de transmettre des paramètres à la plateforme sous-jacente pour indiquer comment charger les modules :

import "./my-module" with { some_param: "hello" };

Actuellement, le seul attribut largement pris en charge est type, utilisé pour importer des modules JSON ou (sur le web) CSS :

import data from "./data" with { type: "json" };

Babel analyse désormais les attributs d'import par défaut, vous pouvez donc retirer @babel/plugin-syntax-import-attributes et @babel/plugin-syntax-import-assertions de votre configuration.

avertissement

L'ancienne syntaxe utilisant assert au lieu de with a été retirée de la proposition. Par défaut, Babel ne l'analysera pas.

Devenue une fonctionnalité JavaScript standard, @babel/plugin-proposal-json-modules a été renommée @babel/plugin-transform-json-modules. Ce plugin n'est pas inclus dans @babel/preset-env, car il n'est utile que si vous n'utilisez pas de bundler ou si votre bundler ne prend pas en charge l'importation de modules JSON.

Réécriture des extensions .ts dans les import() dynamiques (#16794)

Babel prend en charge la réécriture des extensions .ts en .js dans les déclarations d'import depuis l'année dernière, via l'option rewriteImportExtensions de @babel/preset-typescript :

// Input
import { hello } from "./dep.ts";
let myVar: number = hello();

// Output
import { hello } from "./dep.js";
let myVar = hello();

Nous sommes heureux de constater que TypeScript va introduire une option similaire. Cependant, une différence subsiste : Babel ne transformait jusqu'à présent que les chemins dans les déclarations d'import statique (car ce sont les seules pouvant toujours être analysées statiquement), tandis que TypeScript prendra également en charge la réécriture dans les expressions d'import dynamique.

Babel 7.26 s'aligne sur le futur comportement de TypeScript en réécrivant également les extensions dans les import() dynamiques :

// Input
await import("./dep.ts");
await import(url);

// Output
await import("./dep.js");
await import(url.replace(/\.ts$/, ".js")); // simplified