2to3
本页面由 PageTurner AI 翻译(测试版)。未经项目官方认可。 发现错误? 报告问题 →
过去几周,6to5 项目异常活跃;每天都有数千名用户从世界各地下载使用。仅上个月就关闭了超过 200 个问题。自 2.0 版本发布以来,累计完成了 867 次提交和 60 次次要版本及补丁更新。目前它已跻身 npm 下载量前 1% 的顶级包行列,仅上月下载量就接近 10 万次。
今天我们正式发布 3.0 版本。
注意: 6to5 不会将错误修复或向后兼容的新功能保留到主版本发布。下文列出的部分特性实际已在后续 2.x 版本中推出。
宽松模式
6to5 始终高度关注规范符合性。但有时规范要求处理大量边缘情况的复杂性,而这些情况对大多数代码并无影响。
为此我们新增了宽松模式,可忽略部分边缘情况,从而生成更简洁、更精简、执行更快的输出代码。
例如,在构造函数内调用 super() 通常会被编译为:
function Foo() {
_get(Object.getPrototypeOf(Foo.prototype), "constructor", this).call(this);
}
而在宽松模式下则会被编译为:
function Foo() {
Bar.call(this);
}
使用宽松模式前需注意:它并非完全符合规范,若不了解这些差异可能导致代码兼容性问题。更多信息请查阅文档。
性能优化
最近几周 @gaearon 完成了卓越的优化工作,使 6to5 编译速度提升超过 200%。此类改进对我们至关重要,我们非常高兴看到社区成员做出如此重大的贡献。
试验场:Mallet 运算符
正如 Ruby 和 CoffeeScript 中的实现,Mallet 运算符允许根据值的假值性进行条件赋值。
a ||= b
其行为等同于
if (!a) a = b;
此功能由 @jridgewell 贡献。我们鼓励提案作者积极提交想法,让创新功能与最新的语言和 API 特性同步落地。
自包含转换器
我们还引入了新的可选转换器,它消除了对 polyfill 的需求并规避了所有 6to5 注意事项。该转换器会自动为 ES6 静态方法和内置对象创建别名,并在使用异步函数或生成器时自动包含 regenerator。这对于不希望污染全局作用域的库非常理想。
该功能取代了 coreAliasing 转换器和 includeRegenerator 选项。更多信息请参阅文档。
命名空间转换器
在 3.0 版本中,我们重命名了所有转换器,不仅是为了保持命名一致性,更是为了实现命名空间化管理。
例如,我们将所有 es7 转换器重命名为 es7.comprehensions 或 es7.objectSpread 等形式,因此若要禁用所有 es7 转换器,只需:
$ 6to5 --blacklist es7
重命名转换器的完整列表请参见更新日志。
v3 版本包含大量新特性和错误修复,堪称卓越版本。请务必通过更新日志查阅完整内容。
我们要感谢所有参与 6to5 社区的朋友,特别是那些为 3.0 版本诞生做出贡献的开发者们。
未来一片光明。
— The 6to5 team