我对ES6 +相对较新(称为现代JavaScript),但是如果要在浏览器中使用它,似乎需要babel-minify或terser。 (起初我以为Babili是另一位玩家,但它只是Babel-Minify的the old name)
关于用于浏览器的polyfill,有@babel/polyfill或Polyfill.io之类的可立即投入生产的解决方案,通过它们,可以将较小的+更快的代码发送给现代浏览器,因为它们不需要/很少有polyfill(测试快速浏览器,动态加载所需的polyfill,然后启动我们应用的主脚本)。因此,使用这些现代技术似乎绝对合理。
这是我选择babel-minify
或terser
的两难选择。
即将发布的Webpack 5中的Webpack团队decided to switch至terser
。
巴别塔团队做了comparison table,表明terser
在速度上要好得多。
says文档terser
是uglify-es
的分支,之前已被广泛使用。
这些使我认为我必须选择terser
。
但是,另一方面,仍然需要Babel进行转换(并且可以将Babel用于许多有用的东西)。他们已经有很长时间了(尽管Babili/babel-minify
在2016年8月26日是first released,所以uglify
年龄较大)。他们在GitHub上有一个很棒的开发人员社区,可能早已发现并修复了错误。基于这些,我对生产安全输出感到更加信任。但是我还没有找到文章显示babel-minify
胜过terser
的专业人士。
问题:
我会选择terser
,因为它看起来很有希望,并且上面已经说明了原因,但是:
babel-minify
上应该使用terser
的情况是什么?答案 0 :(得分:5)
在大多数情况下,是否使用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还要快(可能是因为它与babel的转换管道无关)。由于这个原因和您列出的原因,terser可能是现在选择的最佳选择。
一个可能的例外是,如果您使用的实验语法尚未作为ECMAScript的一部分进行标准化,但使用了插件的babel解析支持。在这种情况下,babel-minify可能被证明是有益的。