babel-minify vs terser(而不是 uglify-js)
babel-minify vs terser (instead uglify-js)
我对 ES6+ 比较陌生(称为现代 JavaScript),但似乎如果我想在浏览器中使用它,我需要 babel-minify or terser. (First I thought Babili is another player but it's just the old name of Babel-Minify)
关于浏览器的 polyfills,有像 @babel/polyfill or Polyfill.io 这样的生产就绪解决方案,使用它们可以向现代浏览器发送更小、更快的代码,因为它们需要 no/few polyfills(测试浏览器快速地动态加载所需的 polyfill,然后启动我们应用程序的主脚本)。所以使用这些现代技术似乎是绝对合理的。
关于选择 babel-minify
或 terser
的两难选择来了。
即将发布的 Webpack 5 中的 Webpack 团队 decided to switch 到 terser
。
Babel 团队做了一个 comparison table 显示 terser
在速度上要好得多。
文档 says terser
是 uglify-es
的一个分支,之前被广泛使用。
这些让我觉得我必须选择terser
。
但另一方面,Babel 还是需要改造的(可以做很多有用的事情)。他们很久以前就从事这项业务(尽管 Babili/babel-minify
在 2016 年 8 月 26 日是 first released,所以 uglify
更老)。他们在 GitHub 上有一个很棒的开发者社区,错误可能已经发现并更早修复。基于这些,在生产安全输出方面,我对他们更加信任。但我还没有找到任何文章显示 babel-minify
优于 terser
。
问题:
我会选择 terser
,因为它看起来很有前途,而且原因如上所述,但是:
- 什么情况下我应该使用
babel-minify
而不是 terser
?
- 用 Babel 包做所有事情有什么优势吗?
在大多数情况下,使用 terser 还是 babel-minify 都没有太大关系。也就是说,使用 babel-minify 的好处是与 babel 生态系统的其余部分紧密集成。如果你在像 webpack 这样的捆绑器之外使用 babel,或者在 CLI 上使用,babel-minify 可以与其他 babel t运行sforms 同时 运行,因此需要最少的额外配置。如果您通过例如 babel-loader 启用了缓存,Babel-minify 也可以使用与其余 babel 插件相同的缓存。
最初创建babel-minify(然后是babili)是因为没有与ES6或更新版本兼容的uglify-js版本,而babel已经有了支持新语法的解析器。从那以后,terser 成为了一个很好的选择,并且比 babel-minify 执行得更快,同时仍然支持 ES6(可能是因为它没有绑定到 babel 的 t运行sform 管道)。由于这个以及您列出的原因,terser 可能是现在最好的选择。
一个可能的例外是,如果您使用尚未标准化为 ECMAScript 的一部分但在 babel 的解析器中受支持的实验性语法(可能有插件)。在这种情况下,babel-minify 可能被证明是有益的。
我对 ES6+ 比较陌生(称为现代 JavaScript),但似乎如果我想在浏览器中使用它,我需要 babel-minify or terser. (First I thought Babili is another player but it's just the old name of Babel-Minify)
关于浏览器的 polyfills,有像 @babel/polyfill or Polyfill.io 这样的生产就绪解决方案,使用它们可以向现代浏览器发送更小、更快的代码,因为它们需要 no/few polyfills(测试浏览器快速地动态加载所需的 polyfill,然后启动我们应用程序的主脚本)。所以使用这些现代技术似乎是绝对合理的。
关于选择 babel-minify
或 terser
的两难选择来了。
即将发布的 Webpack 5 中的 Webpack 团队 decided to switch 到 terser
。
Babel 团队做了一个 comparison table 显示 terser
在速度上要好得多。
文档 says terser
是 uglify-es
的一个分支,之前被广泛使用。
这些让我觉得我必须选择terser
。
但另一方面,Babel 还是需要改造的(可以做很多有用的事情)。他们很久以前就从事这项业务(尽管 Babili/babel-minify
在 2016 年 8 月 26 日是 first released,所以 uglify
更老)。他们在 GitHub 上有一个很棒的开发者社区,错误可能已经发现并更早修复。基于这些,在生产安全输出方面,我对他们更加信任。但我还没有找到任何文章显示 babel-minify
优于 terser
。
问题:
我会选择 terser
,因为它看起来很有前途,而且原因如上所述,但是:
- 什么情况下我应该使用
babel-minify
而不是terser
? - 用 Babel 包做所有事情有什么优势吗?
在大多数情况下,使用 terser 还是 babel-minify 都没有太大关系。也就是说,使用 babel-minify 的好处是与 babel 生态系统的其余部分紧密集成。如果你在像 webpack 这样的捆绑器之外使用 babel,或者在 CLI 上使用,babel-minify 可以与其他 babel t运行sforms 同时 运行,因此需要最少的额外配置。如果您通过例如 babel-loader 启用了缓存,Babel-minify 也可以使用与其余 babel 插件相同的缓存。
最初创建babel-minify(然后是babili)是因为没有与ES6或更新版本兼容的uglify-js版本,而babel已经有了支持新语法的解析器。从那以后,terser 成为了一个很好的选择,并且比 babel-minify 执行得更快,同时仍然支持 ES6(可能是因为它没有绑定到 babel 的 t运行sform 管道)。由于这个以及您列出的原因,terser 可能是现在最好的选择。
一个可能的例外是,如果您使用尚未标准化为 ECMAScript 的一部分但在 babel 的解析器中受支持的实验性语法(可能有插件)。在这种情况下,babel-minify 可能被证明是有益的。