Sortie de la version 6.0.0
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 →
NOTE: Toutes les intégrations ne sont pas encore mises à jour. Il s'agit d'une version majeure très disruptive, merci de patienter pendant que nous lissons les derniers détails.
Difficile de croire qu'un an s'est écoulé depuis le lancement du projet Babel, mais puisqu'il y avait un gâteau d'anniversaire, cela doit être vrai !
I work with some super awesome people. Thank you @cpojer and Ovidiu! pic.twitter.com/l1NzyobiBz
— Sebastian McKenzie (@sebmck) September 28, 2015
Beaucoup de choses se sont produites cette dernière année. Nous avons parcouru le monde entier pour présenter Babel, et nous y avons rencontré des personnes vraiment exceptionnelles.
Cette dernière année, Babel a trouvé sa place dans l'écosystème JavaScript. En février, nous avons décidé que Babel ne serait pas seulement un transpileur ES6. Il devait devenir une plateforme. Une suite d'outils conçus pour créer la prochaine génération d'outils JavaScript.
Lorsque nous avons publié Babel 5, il incluait une nouvelle API de plugin permettant à quiconque d'utiliser toute la puissance de Babel pour créer des outils s'intégrant directement au processus de transformation. En quelques mois à peine, cela a donné naissance à un écosystème complet d'outils.
Les développeurs ont construit toutes sortes d'extensions : outils de débogage, optimisations de frameworks, minifiers, nouvelles syntaxes expérimentales et systèmes pour appliquer des règles complexes à leurs bases de code. Ces extensions se sont révélées à la fois créatives et extrêmement utiles.
Certains ont également développé des outils complexes basés sur les internes de Babel, comme documentationjs qui utilise le parser Babylon de Babel pour remplacer un outil existant par une version bien plus intelligente.
Mais nous pensons pouvoir aller encore plus loin. Babel devrait pouvoir alimenter des minifiers, linters, formateurs, surligneurs de syntaxe, outils de complétion de code, vérificateurs de types, outils codemod, et tous les autres outils utilisant la même fondation pour fonctionner mieux que jamais.
C'est pourquoi nous publions aujourd'hui Babel 6.
Il s'agit de la mise à jour la plus significative que nous ayons jamais réalisée, permettant au projet de devenir véritablement une plateforme sur laquelle la communauté pourra s'appuyer.
Modularisation
Le changement le plus notable est que Babel a été entièrement restructuré pour être aussi modulaire que possible. Tous les transformateurs ont été réécrits en tant que plugins utilisant la même API exposée à tous.
Tous les composants internes ont également été extraits dans des packages séparés, chacun définissant une API publique légère pouvant être utilisée indépendamment.
Si vous souhaitez construire quelque chose avec des internes de Babel, vous pouvez désormais simplement installer le package correspondant pour y accéder intégralement. Le répertoire des packages recense tous les packages et plugins existants.
Plugins optionnels
Puisque Babel se concentre désormais sur l'être une plateforme d'outils JavaScript plutôt qu'un transpileur ES2015, nous avons décidé de rendre tous les plugins optionnels. Ainsi, lors de l'installation de Babel, votre code ES2015 ne sera plus transpilé par défaut.
Pour simplifier drastiquement l'API publique de Babel, chaque transformateur est désormais totalement indépendant. Cela signifie que les options 'blacklist', 'whitelist', 'optional', 'nonStandard' et 'modules' ont été supprimées, mais cela ne signifie pas pour autant que configurer Babel nécessitera plus de travail.
Préconfigurations de plugins
Comme spécifier et maintenir des dizaines de transformateurs dans un fichier de configuration serait fastidieux, Babel 6 introduit le concept de Plugin Presets qui regroupent des plugins similaires pour une utilisation simplifiée.
$ npm install --save-dev babel-preset-es2015
{
“presets”: [“es2015”]
}
Les préconfigurations officielles incluses aujourd'hui sont babel-preset-es2015 et babel-preset-react, mais nous prévoyons qu'il y en aura beaucoup d'autres à l'avenir.
Nous avons également ajouté des presets pour les étapes telles que babel-preset-stage-0 (qui correspondait à stage: 0 dans le fichier .babelrc de Babel 5.x).
Améliorations des performances
La performance reste une priorité absolue pour Babel. Babel 5 a radicalement transformé le pipeline de transformation et de traversée pour permettre des améliorations majeures implémentées dans Babel 6.
Le processus de traversée représente la plus grande partie du temps d'exécution dans le pipeline Babel. Avec tout outil basé sur AST, il est crucial de minimiser les traversées d'arbre pour maintenir les performances. Les plugins ont été conçus dans cet esprit pour rester extrêmement rapides tout en interagissant avec l'ensemble du système.
Babel 6 implémente une nouvelle optimisation qui fusionne tous les plugins en une seule traversée. Il gère ensuite entièrement ce processus, libérant les plugins de cette préoccupation. En tant que développeur, vous pouvez vous concentrer sur l'écriture de vos transformations tandis que Babel gère le reste.
API des plugins
Suite aux nombreux retours sur la complexité de l'API des plugins, Babel 6 la simplifie significativement. Notez qu'il s'agit d'un changement cassant, mais cela réduira considérablement la confusion.
Babel 5
export default function({ Plugin, types: t }) {
return new Plugin(‘ast-transform’, {
visitor: { … }
});
}
Babel 6
export default function({ types: t }) {
return {
visitor: { … }
};
}
Auteurs de plugins : Lors de la mise à jour de vos plugins, pensez à incrémenter leur version majeure car cela rend Babel 5 et 6 incompatibles. Semver est essentiel !
Nouvelles/Mises à jour des propositions
Plusieurs propositions TC39 ont été mises à jour. Babel 6 intègre les dernières révisions des décorateurs, propriétés de classe et autres fonctionnalités.
Pour conclure
Cette version représente un moment très excitant pour nous.
Toute personne impliquée dans un projet open source sait que c'est un travail colossal, mais la possibilité de contribuer, même modestement, à la communauté reste incroyablement gratifiante.
Sebastian est littéralement resté debout toute la nuit pour finaliser les derniers détails nécessaires au lancement de Babel 6 pendant sa keynote à l'EmberCamp. Il est actuellement 1h du matin pour moi à San Francisco, et j'écris ce billet de blog à toute vitesse en écoutant de la musique EDM pour rester éveillé.
Je remercie chaleureusement toutes les personnes ayant contribué, même modestement, à Babel. Un hommage spécial à Logan Smyth (@loganfsmyth), Henry Zhu (@hzoo), Jesse McCarthy (@jmm) et Denis Pushkarev (@zloirock) pour leur travail acharné dans la gestion des issues et leurs contributions.
Nous sommes ravis de publier enfin Babel 6. Comme toujours, nous nous engageons à en faire l'outil le plus performant possible - continuez à soumettre vos issues et pull requests sur GitHub !