javascript - babel-minify vs terser(而不是 uglify-js)
问题描述
我对 ES6+(称为现代 JavaScript)相对较新,但如果我想在浏览器中使用它,我需要babel- minify或terser。(起初我以为 Babili 是另一个玩家,但它只是Babel-Minify的旧名称)
关于浏览器的 polyfill,有像@babel/polyfill或Polyfill.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-minify
over terser
。
问题:
我会去,terser
因为它看起来很有希望并且上面写的原因,但是:
- 在什么情况下我应该使用
babel-minify
overterser
? - 用 Babel 包做所有事情有什么好处吗?
解决方案
在大多数情况下,您是否使用 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 可能被证明是有益的。
推荐阅读
- java - Android:BitmapFactory.decodeByteArray - 降低图像质量
- mysql - 在 Mysql 中使用 First_Value 函数时的值错误
- asp.net-core - 路由/URL 生成问题
- javascript - 给定 IconUrl 时,agm-markers 不呈现
- c# - 使用 C# 和 Excel.Interop 更改下拉列表的背景颜色
- html - 折叠时无法让引导程序 4 导航栏按钮看起来正确
- background - ImageMagick 使用部分透明像素的背景颜色转换为 png8(带有二进制 alpha 的调色板 PNG)
- javascript - chrome 扩展 chrome.webNavigation (Event) 触发多次
- python-3.x - Keras EarlyStopping 无法识别
- xamarin - 错误无法安装包“Microsoft.Build.Framework 14.3.0”