babel-minify vs terser(代替uglify-js)

ARS*_*S81 8 javascript uglifyjs webpack babeljs babel-polyfill

我对ES6 +相对较新(称为现代JavaScript),但似乎如果要在浏览器中使用它,则需要babel- minifyterser。(首先我以为Babili是另一位玩家,但这只是Babel-Minify 的旧名字

关于用于浏览器的polyfill,可以使用生产就绪的解决方案,例如@ babel / polyfillPolyfill.io,通过它们,可以将较小的+更快的代码发送给现代浏览器,因为它们不需要/很少需要polyfill(快速测试浏览器,加载动态所需的polyfill,然后启动我们应用的主脚本)。因此,使用这些现代技术似乎绝对合理。

这是我选择babel-minify或的困境terser

该团队的WebPack 决定开关,以terser在即将举行的WebPack 5
的巴贝尔队取得了比较表显示terser在速度上要好得多。
文档terseruglify-es以前被广泛使用的一个分支。

这些使我认为我必须选择terser

但是另一方面,转换仍然需要Babel(并且Babel可以用于许多有用的东西)。他们在业务很久以前(虽然Babili/babel-minify首次发布于2016年8月26日,所以uglify是老年人)。他们在GitHub上有一个很棒的开发人员社区,可能早已发现并修复了错误。基于这些,我对生产安全输出感到更加信任。但是我还没有找到任何有关babel-minifyover 的专业文章terser

问题:

我会选择,terser因为它看起来很有希望,并且上面已经说明了原因,但是:

  • 什么情况下我应该babel-minify用完terser
  • 使用Babel软件包进行所有操作是否具有任何优势?

16p*_*sle 7

在大多数情况下,是否使用terser或babel-minify都不重要。就是说,使用babel-minify的好处是与Babel生态系统的其余部分紧密集成。如果在webpack之类的捆绑程序之外或在CLI上使用babel,则babel-minify可以与其他babel转换同时运行,因此需要最少的附加配置。如果您通过例如babel-loader启用了缓存,那么Babel-minify也将能够使用与其余babel插件相同的缓存。

最初,创建babel-minify(然后称为babili)是因为不存在与ES6或更高版本兼容的uglify-js版本,并且babel已经具有支持新语法的解析器。从那时起,terser成为了不错的选择,并且在仍支持ES6的同时,其性能比babel-minify还要快(可能是因为它与babel的转换管道无关)。由于这个原因和您列出的原因,terser可能是现在选择的最佳选择。

一个可能的例外是,如果您使用的实验语法尚未作为ECMAScript的一部分进行标准化,但已在babel的解析器(可能带有插件)中得到支持。在这种情况下,babel-minify可能被证明是有益的。