# 功能时间表
我们在每个 Babel 版本中引入了哪些主要的新特性?此页面包含每个次要版本的非常简短的摘要,或者您可以在 GitHub 上 (opens new window) 阅读完整的更新日志!此外,使用此时间线来跟踪其他一些重要的工作,例如babel-polyfills (opens new window) 项目。
# Babel7.21.0 (opens new window)
博文
打字稿 5.0
支持- 支持更新* 在 2023 年 1 月 TC39 会议上达成共识的*
decorators提案
- 支持*
内联 RegExp 修饰符
Stage 3 提案JavaScript
/(?i-m:a.)/m.exec("a\nAb"); // ["Ab"]
# Babel7.20.0 (opens new window)
博文
打字稿 4.9
支持对显式资源管理 (opens new window) 第 2 阶段提案的解析器支持
JavaScript
{
using handle = openFile(name, "w+");
write(handle, "Hi!\n");
write(handle, ":)\n");
} // Automatically close the file
- 对导入反射 (opens new window) 第 2 阶段提案的解析器支持
JavaScript
import module mod from "./mod.js";
// later ...
import(mod);
# babel-loader 9.0.0
发布
# Babel7.19.0 (opens new window)
博文
- 支持第三阶段版本的*
装饰器
提案 - 转换对*
重复命名捕获组
Stage 3 提案的支持JavaScript
/(?<year>\d\d\d\d)-(?<month>\d\d)|(?<month>\d\d)-(?<year>\d\d\d\d)/
# Babel7.18.0 (opens new window)
博文
打字稿 4.7
支持转换对Private destructuring
Stage 2 提案的支持JavaScript
class A {
#x = 2;
method() {
const { #x: x } = this;
}
}
regenerator-runtime
编译生成器时不再需要手动包含帮助程序
# Babel7.17.0 (opens new window)
博文
- 支持新版装饰器 (opens new window) Stage 2 提案
JavaScript
class A {
@reactive #x = 2;
@logger
method() {
this.#x++;
}
}
- 支持字符串第 2 阶段提案的 RegExp 集合符号和属性 (opens new window)
JavaScript
/[\p{RGI_Emoji}&&[\0-\uFFFF]]/v;
- 对私有解构 (opens new window) 阶段 2 提案的解析器支持
JavaScript
class A {
#x = 2;
method() {
const { #x: x } = this;
}
}
# Babel7.16.0 (opens new window)
博文
- 默认* 启用*
类静态块Stage 4 提案
JavaScript
class A {
static {
initialize(A);
}
}
打字稿 4.5
支持支持*
ESLint 8
in@babel/eslint-parser
.
# Babel7.15.0 (opens new window)
博文
- 默认* 启用对*
顶级Stage 4 提案的解析await
JavaScript
import db from "db";
await db.connect();
- 默认* 启用*
私人品牌检查第 4 阶段提案
JavaScript
class A {
static { initialize(A); } // static block
#field;
is(obj) {
return #field in obj; // private brand check
}
}
- 支持“Hack-style” *
pipeline operator
Stage 2 提案JavaScript
const result = "World" |> `Hello, ${%}!` |> alert(%);
打字稿 4.4
支持
# Babel7.14.0 (opens new window)
博文
- 默认* 启用*
Class Fields
、Private Methods
和Static Class Features Stage 4 proposals (opens new window) - 将*
私有品牌检查
和静态类块 (opens new window) 建议添加到@babel/preset-env
的shippedProposals (opens new window) JavaScript
class A {
static { initialize(A); } // static block
#field;
is(obj) {
return #field in obj; // private brand check
}
}
- 支持*
async do表达式
提案JavaScript
let valP = async do {
2 + await computeIt();
};
支持*
importInterop: "node"
中的选项@babel/plugin-transform-modules-commonjs
,使 Babel 符合 Node.js 行为打字稿 4.3
支持
# Babel7.13.0 (opens new window)
博文
- 顶级*
targets
选项 (RFC
) - 粒度编译器假设(*
文档
,RFC (opens new window) ) - 支持*
记录和元组
提案JavaScript
let rec = #{ x: 1 };
let tup = #[1, 2, 3];
打字稿 4.2
支持
# Babel7.12.0 (opens new window)
博文
- 支持*
类静态块
提案JavaScript
class A {
static { initialize(A); }
}
- 支持*
导入和导出字符串名称
JavaScript
let happy = "wooo!";
export { happy as "😃" };
对Import Assertions
提议的解析器支持JavaScript
import json from "./foo.json" assert { type: "json" };
打字稿 4.1
支持
# Babel7.11.0 (opens new window)
博文
- 默认* 启用*
逻辑分配
和数字分隔符第 4 阶段提案
对Decimal
提案的解析器支持JavaScript
console.assert(0.1m + 0.2m === 0.3m);
打字稿 4.0
支持
# @babel/eslint- parser
博文
# Babel7.10.0 (opens new window)
博文
import.meta
默认启用对 Stage 4 提案的解析器支持- 支持*
Private Fields
提案的人体工程学品牌检查JavaScript
class Car {
#plate;
race(other) {
if (#plate in other) console.log("Racing against another car!");
}
}
# babel- polyfills
存储库
# Babel7.9.0 (opens new window)
博文
bugfixes
中的选项@babel/preset-env
,解决浏览器错误而不是编译整个功能打字稿 3.8
支持支持流*
declare
类字段支持*
自动
JSX 运行时
# Babel7.8.0 (opens new window)
博文
默认* 启用*
Optional Chaining
和Nullish Coalescing Stage 4 提案
支持*
.mjs
配置文件
# Babel7.7.0 (opens new window)
博文
对顶级await
提案的解析器支持
JavaScript
import db from "./database.js";
await db.connect();
添加对 Early Errors 的错误恢复支持
@babel/parser
支持
.json
和.cjs
配置文件打字稿 3.7
支持
# Babel7.6.0 (opens new window)
博文
- 支持静态私有访问器, *
静态类特性
提案的一部分JavaScript
class Dog {
static get #className() { return "Dog"; }
}
# Babel7.5.0 (opens new window)
博文
- 支持*
F# 管道运算符
提案JavaScript
num |> add(2) |> double
打字稿*
namespace
支持
# Babel7.4.0 (opens new window)
博文
- 支持注入*
core-js@3
polyfill - 支持*
部分申请
提案JavaScript
strings.map(parseInt(?));
- 支持静态私有方法,部分 *
静态类特性
提案JavaScript
class Dog {
static #register() { /* ... */ }
}
打字稿 3.4
支持
# Babel7.3.0 (opens new window)
博文
- 支持实例私有访问器, *
私有方法
提案的一部分JavaScript
class Dog {
get #randomId() { return Math.random(); }
}
- 支持*
智能管道运营商
提案JavaScript
num |> add(2, #) |> double
- 支持 * 正则表达式中的*
命名捕获组
JavaScript
str.match({String.raw`/^(?<year>\d{4})-(?<month>\d{2})-(?<day>\d{2})$/`})
TypeScript 3.2 和 2.9 支持
# Babel7.2.0 (opens new window)
博文
- 支持实例私有方法,*
私有方法
提案的一部分JavaScript
class Dog {
#bark() { console.log("Mew!") }
}
# Babel7.1.0 (opens new window)
博文
- 支持*
装饰器
提案,因为它在 2018 年 9 月指定JavaScript
class Person {
@autoIncrement age;
}
- 支持静态私有字段,*
静态类特性
提案的一部分JavaScript
class Person {
static #classId = 3;
}
# Babel7 (opens new window)
博文
自 2 年的预发布以来,这有很多变化。
- 放弃对未维护的节点版本的支持:0.10、0.12、4、5
- 切换到作用域包 ( *
babel-core
to@babel/core
) - 删除年度预设 ( *
@babel/preset-es2015
) 和阶段预设 (@babel/preset-stage-0
)(博客文章 (opens new window) )。 - 在某些情况下添加了“纯”( *
/*#__PURE__*/
) 注释支持。(稍后实现为@babel/helper-annotate-as-pure (opens new window) - 添加项目范围的*
babel.config.js
配置文件 (docs
) 和overrides (opens new window) 配置选项。 - 添加*
"useBuiltIns: "usage"
到@babel/preset-env (opens new window) - 支持 TypeScript 通过*
@babel/preset-typescript
- 支持 JSX 片段*
<></>
- 支持大量 TC39 提案:
Unicode 属性正则表达式
JSON超集
new.target
类私有实例字段
(class A { #b = 2 }
)可选的捕捉绑定
try { throw 0 } catch { do() }
BigInt
(仅语法)import.meta
(仅语法)(import.meta.url
)数字分隔符
(1_000
)function.sent
可选链接
(a?.b
)逻辑赋值运算符
(a &&= b; a ||= b
)无效合并运算符
(a ?? b
)管道操作员
(a |> b
)抛出表达式
(() => throw new Error("a")
)