跳至主内容

2to3

· 1 分钟阅读
非官方测试版翻译

本页面由 PageTurner AI 翻译(测试版)。未经项目官方认可。 发现错误? 报告问题 →

过去几周,6to5 项目异常活跃;每天都有数千名用户从世界各地下载使用。仅上个月就关闭了超过 200 个问题。自 2.0 版本发布以来,累计完成了 867 次提交和 60 次次要版本及补丁更新。目前它已跻身 npm 下载量前 1% 的顶级包行列,仅上月下载量就接近 10 万次。

今天我们正式发布 3.0 版本。

注意: 6to5 不会将错误修复或向后兼容的新功能保留到主版本发布。下文列出的部分特性实际已在后续 2.x 版本中推出。

宽松模式

6to5 始终高度关注规范符合性。但有时规范要求处理大量边缘情况的复杂性,而这些情况对大多数代码并无影响。

为此我们新增了宽松模式,可忽略部分边缘情况,从而生成更简洁、更精简、执行更快的输出代码。

例如,在构造函数内调用 super() 通常会被编译为:

JavaScript
function Foo() {
_get(Object.getPrototypeOf(Foo.prototype), "constructor", this).call(this);
}

而在宽松模式下则会被编译为:

JavaScript
function Foo() {
Bar.call(this);
}

使用宽松模式前需注意:它并非完全符合规范,若不了解这些差异可能导致代码兼容性问题。更多信息请查阅文档

性能优化

最近几周 @gaearon 完成了卓越的优化工作,使 6to5 编译速度提升超过 200%。此类改进对我们至关重要,我们非常高兴看到社区成员做出如此重大的贡献。

试验场:Mallet 运算符

正如 Ruby 和 CoffeeScript 中的实现,Mallet 运算符允许根据值的假值性进行条件赋值。

JavaScript
a ||= b

其行为等同于

JavaScript
if (!a) a = b;

此功能由 @jridgewell 贡献。我们鼓励提案作者积极提交想法,让创新功能与最新的语言和 API 特性同步落地。

自包含转换器

我们还引入了新的可选转换器,它消除了对 polyfill 的需求并规避了所有 6to5 注意事项。该转换器会自动为 ES6 静态方法和内置对象创建别名,并在使用异步函数或生成器时自动包含 regenerator。这对于不希望污染全局作用域的库非常理想。

该功能取代了 coreAliasing 转换器和 includeRegenerator 选项。更多信息请参阅文档

命名空间转换器

在 3.0 版本中,我们重命名了所有转换器,不仅是为了保持命名一致性,更是为了实现命名空间化管理。

例如,我们将所有 es7 转换器重命名为 es7.comprehensionses7.objectSpread 等形式,因此若要禁用所有 es7 转换器,只需:

Shell
$ 6to5 --blacklist es7

重命名转换器的完整列表请参见更新日志


v3 版本包含大量新特性和错误修复,堪称卓越版本。请务必通过更新日志查阅完整内容。

我们要感谢所有参与 6to5 社区的朋友,特别是那些为 3.0 版本诞生做出贡献的开发者们。

未来一片光明。

— The 6to5 team