6.0.0 版本发布
本页面由 PageTurner AI 翻译(测试版)。未经项目官方认可。 发现错误? 报告问题 →
注意: 目前并非所有集成方案都已更新。这是一个破坏性较大的主版本更新,恳请各位耐心等待我们修复剩余问题。
很难相信 Babel 项目已经启动一年了,但我们确实吃了生日蛋糕,所以这一定是真的!
I work with some super awesome people. Thank you @cpojer and Ovidiu! pic.twitter.com/l1NzyobiBz
— Sebastian McKenzie (@sebmck) September 28, 2015
过去一年发生了许多事。我们走遍世界各地推广 Babel,沿途结识了许多杰出人才。
过去一年里,Babel 在 JavaScript 社区找到了自己的定位。二月份我们决定 Babel 不应仅是 ES6 转译器,而应成为平台——整套旨在构建下一代 JavaScript 工具链的解决方案。
当我们发布 Babel 5 时,它带来了全新的插件 API,允许任何人利用 Babel 的全部能力创建直接接入转换流程的工具。短短数月内,这已发展成完整的工具生态系统。
开发者们构建了从调试工具、框架优化器、代码压缩器到实验性新语法系统等各类扩展,用于在代码库中实施复杂规则。这些扩展既展现了创造力,也极具实用价值。
开发者们还在 Babel 内部机制基础上构建了复杂工具链,例如documentationjs——它利用 Babel 的 Babylon 解析器替代现有工具,实现了更智能的版本。
但我们认为还能更进一步。Babel 应当能驱动代码压缩器、代码检查器、格式化工具、语法高亮器、代码补全工具、类型检查器、代码重构工具等各类工具,让它们共享相同基础,以前所未有的效率完成工作。
因此今天我们正式发布 Babel 6。
这是我们有史以来最重要的更新,使本项目真正成为可供社区构建的开放平台。
模块化架构
最显著的变化是 Babel 已彻底重构为高度模块化架构,所有转换器均重写为插件形式,使用与开放 API 相同的接口规范。
所有内部组件也被拆分为独立包,每个包都定义了轻量级公共 API,可独立于其他组件使用。
如需基于 Babel 内部组件构建功能,现在只需安装对应包即可获得完整访问权限。所有现有包和插件都可在packages 目录中找到。
可选插件机制
由于 Babel 定位于 JavaScript 工具平台而非 ES2015 转译器,我们决定所有插件均采用可选机制。这意味着安装 Babel 后默认不再转译 ES2015 代码。
为大幅简化 Babel 的公共 API,每个转换器现已完全独立。这意味着 "blacklist"、"whitelist"、"optional"、"nonStandard" 和 "modules" 等选项已被移除,但这并不代表配置代码转译需要更多工作量。
插件预设集
鉴于在配置文件中指定和维护数十个转换器过于繁琐,Babel 6 引入了插件预设集概念——将相关插件分组以便一键调用。
$ npm install --save-dev babel-preset-es2015
{
“presets”: [“es2015”]
}
当前官方预设集包括 babel-preset-es2015 和 babel-preset-react,预计未来将推出更多预设方案。
我们还新增了阶段性预设,例如 babel-preset-stage-0(在 Babel 5.x 中对应 .babelrc 配置里的 stage: 0)。
性能优化
性能始终是 Babel 的首要优化目标。Babel 5 已对转译和遍历流程进行了重大调整,为 Babel 6 实现的核心性能优化奠定了基础。
遍历过程是 Babel 流程中最耗时的环节。对于任何基于 AST 的工具,都应尽可能减少树的遍历次数以保证速度。插件设计正是围绕这一原则展开,使其能在协同工作时保持闪电般的速度。
Babel 6 实现了全新优化:将所有插件合并为单次遍历。它完全接管遍历流程,插件开发者无需再手动处理这些细节。您只需专注于编写转译逻辑,其余工作交给 Babel 即可。
插件 API
根据大量反馈,Babel 6 简化了原本令人困惑的插件 API。请注意这是破坏性变更,但能显著降低理解门槛。
Babel 5
export default function({ Plugin, types: t }) {
return new Plugin(‘ast-transform’, {
visitor: { … }
});
}
Babel 6
export default function({ types: t }) {
return {
visitor: { … }
};
}
插件开发者请注意:更新插件时请务必升级主版本号,因为这将导致插件与 Babel 5 和 6 互不兼容。遵循语义化版本规范至关重要!
新增/更新的提案
近期 TC39 更新了多项提案。Babel 6 已适配装饰器、类属性等特性的最新规范修订。
最后
本次发布令我们倍感振奋。
凡是参与过开源项目的人都明白这需要付出巨大努力,但最终能为社区贡献绵薄之力,这份成就感无与伦比。
Sebastian 彻夜未眠,只为在 EmberCamp 主题演讲前完成 Babel 6 发布的所有收尾工作。此刻旧金山时间是凌晨 1 点,我正在听着电子舞曲赶稿,努力保持清醒。
感谢所有为 Babel 贡献过力量的伙伴——无论贡献大小。特别致敬 Logan Smyth (@loganfsmyth)、Henry Zhu (@hzoo)、Jesse McCarthy (@jmm) 以及 Denis Pushkarev (@zloirock),感谢你们在问题管理和代码贡献上的辛勤付出。
我们无比激动地向全世界推出 Babel 6。我们将一如既往地打造更卓越的工具,期待大家继续提交 GitHub issue 和 pull request!