首页 > 解决方案 > babel-minify vs terser(而不是 uglify-js)

问题描述

我对 ES6+(称为现代 JavaScript)相对较新,但如果我想在浏览器中使用它,我需要babel- minify或terser。(起初我以为 Babili 是另一个玩家,但它只是Babel-Minify的旧名称)

关于浏览器的 polyfill,有像@babel/polyfillPolyfill.io这样的生产就绪解决方案,使用它们可以向现代浏览器发送更小、更快的代码,因为它们不需要/很少的 polyfill(快速测试浏览器,加载需要动态填充,然后启动我们应用程序的主脚本)。因此,使用这些现代技术似乎是绝对合理的。

babel-minify这是我关于选择or的困境terser

Webpack 团队决定在即将到来的 Webpack 5 中切换。Babelterser团队
做了一个对比表,显示terser速度要好得多。
文档这是之前被广泛使用terser的一个分支。uglify-es

这些让我觉得我必须选择terser

但另一方面,转换仍然需要 Babel(并且可以用于许多有用的事情)。他们很久以前就从事这项业务(尽管Babili/babel-minify首次发布于 2016 年 8 月 26 日,所以uglify更老)。他们在 GitHub 上有一个很棒的开发者社区,错误可能已经发现并很快修复。基于这些,在生产安全输出方面,我对他们更加信任。但是我还没有找到任何文章显示 pro 的babel-minifyover terser

问题:

我会去,terser因为它看起来很有希望并且上面写的原因,但是:

标签: javascriptwebpackbabeljsuglifyjsbabel-polyfill

解决方案


在大多数情况下,您是否使用 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 就成为了一个不错的选择,并且比 babel-minify 执行得更快,同时仍然支持 ES6(可能是因为它没有绑定到 babel 的转换管道)。由于这一点以及您列出的原因,terser 可能是现在选择的最佳选择。

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


推荐阅读