web-dev-qa-db-fra.com

babel-minify vs terser (à la place uglify-js)

Je suis relativement nouveau sur ES6 + (appelé JavaScript moderne) mais il semble que si je veux l'utiliser dans les navigateurs, j'ai besoin de babel-minify ou terser . (D'abord, je pensais que Babili était un autre joueur mais c'est juste l'ancien nom de Babel-Minify)

À propos des polyfills pour le navigateur, il existe des solutions prêtes à la production comme @ babel/polyfill ou Polyfill.io et avec elles, il est possible d'envoyer du code plus petit et plus rapide aux navigateurs modernes parce que ils ne nécessitent pas/peu de polyfills (testez rapidement le navigateur, chargez les polyfills nécessaires dynamiquement puis lancez le script principal de notre application) Il semble donc tout à fait raisonnable d'utiliser ces technologies modernes.

Voici mon dilemme concernant le choix de babel-minify ou terser.

L'équipe Webpack a décidé de passer à terser dans le prochain Webpack 5.
L'équipe Babel a fait un tableau de comparaison montrant que terser est bien meilleur en vitesse.
Les documents dit que terser est un fork de uglify-es qui était largement utilisé auparavant.

Cela me fait penser que je dois choisir terser.

Mais d'un autre côté, Babel est toujours nécessaire pour la transformation (et peut être utilisé pour de nombreuses choses utiles). Ils sont dans l'entreprise depuis longtemps (bien que Babili/babel-minify était première sortie le 26 août 2016, donc uglify est plus ancien). Ils ont une grande communauté de développeurs sur GitHub, des bugs ont peut-être été découverts et corrigés plus tôt. Sur cette base, je me sens plus confiant en ce qui concerne la production en toute sécurité. Mais je n'ai trouvé aucun article montrant les pro de babel-minify sur terser.

Questions:

J'irais avec terser car cela semble prometteur et les raisons écrites ci-dessus, mais:

  • Quels sont les cas où je devrais utiliser babel-minify sur terser?
  • A-t-il des avantages à tout faire avec les packages Babel?
8
ARS81

Dans la plupart des cas, peu importe que vous utilisiez ou non terser ou babel-minify. Cela dit, l'avantage d'utiliser babel-minify serait une intégration étroite avec le reste de l'écosystème babel. Si vous utilisez babel en dehors d'un bundler comme webpack, ou sur la CLI, babel-minify peut être exécuté en même temps que d'autres transformations babel, et donc nécessitant une configuration supplémentaire minimale. Babel-minify serait également capable d'utiliser le même cache que les autres plugins babel, si vous avez activé la mise en cache via par exemple babel-loader.

À l'origine, babel-minify (alors babili) a été créé car il n'y avait pas de version uglify-js compatible avec ES6 ou plus récente, et babel avait déjà un analyseur qui supportait la nouvelle syntaxe. Depuis lors, terser est devenu une bonne alternative et fonctionne plus rapidement que babel-minify tout en prenant en charge ES6 (probablement parce qu'il n'est pas lié au pipeline de transformation de babel). Pour cette raison et pour les raisons que vous avez énumérées, terser serait probablement la meilleure option à choisir maintenant.

Une exception possible serait si vous utilisez une syntaxe expérimentale qui n'a pas encore été normalisée dans le cadre d'ECMAScript, mais qui est prise en charge dans l'analyseur de babel (éventuellement avec un plugin). Dans ce cas, babel-minify pourrait s'avérer bénéfique.

7
16patsle