Babel 的 stage 代表 ECMAScript 提案(即新 JavaScript 特性)的标准化阶段,用于区分不同成熟度的语言特性。这些阶段从实验性草案(Stage 0)到正式标准(Stage 4),开发者可通过配置 Babel 插件或预设(preset)来按需支持这些特性。以下是各阶段的详细说明:
🔬 Stage 0 - Strawman(展示阶段)
- 含义:特性仅处于构思阶段,可能是社区提出的初步想法或实验性概念。
- 稳定性:极低,可能被废弃或大幅修改。
- 典型插件:
transform-do-expressions:支持在 JSX 中直接嵌入if/else逻辑(如{do { if(x) <Component/> }})。transform-function-bind:引入::操作符简化上下文绑定(如obj::func等价于func.bind(obj))。
- 适用场景:个人项目或前沿技术探索,不建议生产环境使用。
🧪 Stage 1 - Proposal(提案阶段)
- 含义:特性已提交至 TC39 委员会(ECMAScript 标准制定组织),有初步语法规范。
- 稳定性:较低,可能发生较大调整。
- 典型插件:
transform-class-properties:支持类的静态属性(如static prop = 1;)。transform-decorators:支持装饰器语法(如@autobind修饰方法)。transform-export-extensions:扩展export语法(如export v from 'module';)。
- 适用场景:实验性项目,需谨慎评估风险。
📝 Stage 2 - Draft(草案阶段)
- 含义:特性已形成规范草案,语法和语义基本稳定。
- 稳定性:中等,核心逻辑不再变化,细节可能微调。
- 典型插件:
transform-object-rest-spread:支持对象解构与扩展运算符(如let {x, ...y} = obj;)。syntax-trailing-function-commas:允许函数参数末尾添加逗号(如function(a, b,) {})。
- 适用场景:可尝试在生产环境使用,但需关注兼容性。
🚀 Stage 3 - Candidate(候选阶段)
- 含义:特性已完成规范,进入浏览器/引擎实现测试阶段。
- 稳定性:高,预计成为正式标准,仅可能修复边缘问题。
- 典型插件:
transform-async-to-generator:将async/await转换为 Generator 函数。transform-exponentiation-operator:支持幂运算符**(如2**3 = 8)。
- 适用场景:安全用于生产环境,社区广泛支持。
✅ Stage 4 - Finished(已完成阶段)
- 含义:特性已纳入正式 ECMAScript 标准(如 ES2015、ES2020)。
- 稳定性:最高,所有现代浏览器原生支持。
- 示例:
Promise、class、箭头函数等。 - Babel 角色:无需插件转译,但可能需
@babel/preset-env兼容旧浏览器。
⚠️ 关键注意事项
-
包含关系:
stage-0⊇stage-1⊇stage-2⊇stage-3
例如,配置stage-0会默认启用所有阶段特性。
-
Babel 7 的重大变更:
- 废弃
stage-x预设:因提案变动频繁,Babel 7 移除stage-0~stage-3预设,改为直接指定具体插件(如@babel/plugin-proposal-decorators)。 - 替代方案:使用
@babel/preset-env根据目标环境自动按需转译正式标准特性,实验特性需手动配置插件。
- 废弃
-
生产建议:
- 避免使用
stage-0/1,优先选择stage-3及以上特性。 - 使用
@babel/preset-env替代stage-x预设,减少冗余代码并提升兼容性。
- 避免使用
💎 总结:阶段对比表
| Stage | 名称 | 稳定性 | 典型特性 | 生产适用性 |
|---|---|---|---|---|
| 0 | Strawman | ⭐☆☆☆☆ | do 表达式、:: 绑定 | ❌ 避免使用 |
| 1 | Proposal | ⭐⭐☆☆☆ | 类属性、装饰器 | ⚠️ 谨慎评估 |
| 2 | Draft | ⭐⭐⭐☆☆ | 对象解构扩展、尾逗号函数 | ✅ 可尝试 |
| 3 | Candidate | ⭐⭐⭐⭐☆ | async/await、幂运算符 | ✅ 推荐 |
| 4 | Finished | ⭐⭐⭐⭐⭐ | Promise、class(ES6) | ✅ 原生支持无需转译 |
合理配置 Babel 的 stage 特性,能平衡开发效率与代码稳定性。建议结合 Babel 官方文档 和具体环境需求调整策略。