7.3.0 Disponible : Groupes de capture nommés, accesseurs privés d'instance et pipeline intelligent
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 →
Après plus de 80 commits, la dernière version mineure de Babel est là !
Cette version inclut le support des groupes de capture nommés dans les expressions régulières, des accesseurs privés d'instance, l'opérateur de pipeline intelligent et plusieurs améliorations pour l'analyse de TypeScript. Vous pouvez consulter le journal complet des modifications sur GitHub.
Un grand merci à @jamesgeorge007 et @armano2 pour leur première PR !
Bloomberg continue de sponsoriser l'implémentation des nouvelles fonctionnalités de classe dans Babel : après nous avoir offert les champs statiques privés et les méthodes privées d'instance, ils viennent d'implémenter les accesseurs (getters/setters) privés d'instance.
Un autre remerciement spécial au Projet AMP, qui a augmenté son soutien à Babel à 24 000 $/an en devenant un Base Support Sponsor.
Si vous ou votre entreprise souhaitez soutenir Babel et l'évolution de JavaScript mais ne savez pas comment faire, vous pouvez nous faire un don sur OpenCollective et, mieux encore, travailler directement avec nous sur l'implémentation des nouvelles propositions ECMAScript ! En tant que projet bénévole, nous comptons sur le soutien de la communauté pour financer nos efforts visant à répondre aux besoins variés des utilisateurs de JavaScript et pour assurer la maintenance du code.
Accesseurs privés d'instance (getters et setters) (#9101)
class Person {
#firstname = "Babel";
#lastname = "JS";
get #name() {
return this.#firstname + " " + this.#lastname;
}
sayHi() {
alert(`Hi, ${this.#name}!`);
}
}
Merci à Tim (Bloomberg) pour l'implémentation de cette proposition !
Vous pouvez tester cette nouvelle fonctionnalité en ajoutant @babel/plugin-proposal-private-methods à votre configuration, si vous ne l'avez pas déjà fait depuis Babel 7.2.0, ou en activant le preset stage-3 dans le REPL en ligne.
La prise en charge des fonctionnalités privées des classes est presque complète !
| 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 | ✖ |
Opérateur de pipeline intelligent (#9179)
Babel implémente plusieurs variantes de cette proposition pour aider TC39 à tester et recueillir les retours de la communauté. Comme pour toutes les propositions, attendez-vous à des changements futurs.
Dans Babel 7.2.0, nous avons implémenté le support d'analyse syntaxique pour la proposition d'opérateur pipeline intelligent. Grâce au travail de Thiago Arrais, vous pouvez désormais le transpiler vers l'ECMAScript standard et l'expérimenter !
Nous ne prenons actuellement en charge que la proposition principale, sans aucune des fonctionnalités supplémentaires. De plus, yield et await ne sont pas encore pris en charge dans les pipelines.
name
|> # || throw new TypeError()
|> doubleSay(#, ', ')
|> capitalize
|> # + '!'
|> new User.Message(#)
|> stream.write(#, { sync: true })
|> console.log;
Vous pouvez l'activer dans votre projet via le plugin @babel/plugin-proposal-pipeline-operator avec l'option proposal: "smart" :
{
"plugins": [
["@babel/plugin-proposal-pipeline-operator", { "proposal": "smart" }]
]
}
La proposition "minimale" avait précédemment été ajoutée dans [v7.0.0-beta.3] via #6335
Groupes de capture nommés (#7105)
let stringRe = /(?<quote>"|')(?<contents>.*?)\k<quote>/;
let { contents } = `"foo bar"`.match(stringRe);
Le support de la plus importante fonctionnalité ECMAScript 2018 manquante dans Babel est désormais disponible ! Auparavant, un support partiel des groupes nommés existait via le formidable plugin communautaire babel-plugin-transform-modern-regexp de Dmitry Soshnikov. Nous avons également coordonné nos efforts avec core-js pour fournir un support complet via le nouveau package @babel/plugin-transform-named-capturing-groups-regex.
@babel/preset-env a également été mis à jour pour l'inclure, donc beaucoup d'entre vous pourront l'utiliser sans aucune modification !
Notez que les fonctionnalités d'exécution (comme la propriété groups) ne fonctionnent que dans les navigateurs avec un support correct des expressions régulières ES6. Si vous devez prendre en charge des environnements plus anciens, vous pouvez inclure un polyfill pour les méthodes de RegExp.
Mises à jour TypeScript (#9302, #9309)
Grâce au travail d'Armano sur @babel/parser et d'Henry/Brian sur @babel/generator (avez-vous vu le streaming ?), nous prenons désormais en charge let x: typeof import('./x');, ajouté dans TypeScript 2.9. Nous supportons également le mot-clé de type bigint, introduit dans TypeScript 3.2.
babel-eslint v11.0.0-beta.0 : Détection automatique de syntaxe via la lecture de la configuration (babel/babel-eslint#711)
Merci à Kai (également membre du TSC d'ESLint) pour avoir finalisé ce travail !
Jusqu'à présent, babel-eslint activait manuellement tous les plugins de syntaxe (avec une liste devenant fréquemment obsolète). Cela signifiait aussi qu'il pouvait analyser une syntaxe qu'une instance configurée de Babel n'autorisait pas lors de la compilation. Nous exigeons désormais @babel/core comme peerDependency et supposons qu'une configuration Babel existe lors de l'utilisation de babel-eslint, utilisant cette même configuration pour s'adapter (ce qui constitue un changement cassant). Ce changement devrait faciliter la maintenance du module tout en réutilisant la configuration Babel, une hypothèse raisonnable pour les utilisateurs de babel-eslint.
Vous pouvez nous aider en testant si cette version bêta fonctionne avec votre projet 🙂