我们刚刚发布了 Babel 7.16.0!
此版本默认启用 类静态初始化块。它不仅支持 管道操作符 提案的新变体,还提升了对 TypeScript 4.5 的兼容。
此外,@babel/eslint-parser
现已支持 ESLint 8.
你可以 在 GitHub 上 阅读完整的更新日志。
如果你或你的公司希望支持 Babel 和 JavaScript 的发展,但不知道该如何资助我们,你可以在我们的 Open Collective上给我们捐款,比这更好的方式是,直接与我们合作实现 新的 ECMAScript 提案!作为一个靠志愿者驱动的项目,我们依靠社区的支持,来资助我们更努力地为广泛的 JavaScript 用户提供更好的支持。如果你想讨论更多内容,请联系 team@babeljs.io!
亮点
默认启用类静态初始化块 (#13713)
class MyClass {
static {
doSomeInitialization(MyClass);
console.log("MyClass initialized!");
}
}
八月份进入第 4 阶段 的静态初始化块,现在在 @babel/parser
和 @babel/preset-env
中默认启用。
如果你使用的是 classStaticBlock
解析器插件,或是 @babel/plugin-syntax-class-static-block
,你可以安全地将它们从配置中移除。
如果你已经在使用 @babel/preset-env
,你现在可以从你的配置中删除 @babel/plugin-proposal-class-static-block
。
TypeScript 4.5 特性 (#13802, #13838)
TypeScript 4.5 引入了用于将导入标记为 type-only 的新语法:你可以标记单个说明符,而不是标记整个 import 语句:
// TypeScript 4.4
import type { Foo } from "my-module";
import { fooInstance } from "my-module";
// TypeScript 4.5
import { type Foo, fooInstance } from "my-module";
它还支持两个新的文件扩展名:.mts
和 .cts
,即 .mjs
和 .cjs
的镜像。在启用 @babel/preset-typescript
的情况下将 .mts
或 .cts
文件传递给 Babel 时,它会使用文件扩展名来检测所需的源类型("module"
或 "script"
)。
默认情况下,.mts
和 .cts
文件不能包含 JSX 代码,因为它们不能包含与 JSX 会有歧义的 TypeScript 批注(<Type> cast
和 <T>() => {}
)。
你可以 在他们的博客上 阅读完整的 TypeScript 4.5 发布博文。
^
Hack-style 管道的主题 token (#13749)
管道操作符 提案的拥护者正在考虑 各种主题 token(对上一个管道步骤中的值的引用)。
@babel/plugin-proposal-pipeline-operator
(和 "pipelineOperator"
解析器插件)现在支持其中三个:#
, ^
和 %
。
let values = getNames()
|> ["default"].concat(^)
|> await loadValues(^);
You can enable the current version of the pipeline operator proposal using the proposal: "hack"
option, and you can choose the topic token using topicToken: "^"
:
{
"plugins": [
["@babel/plugin-proposal-pipeline-operator", {
"proposal": "hack",
"topicToken": "^"
}]
]
}
@babel/eslint-parser
中的 ESLint 8 支持 (#13782)
@babel/eslint-parser
现已支持 ESLint 8:你可以更新你的 "eslint"
依赖,它就会正常工作。
如果你是 ESLint 插件作者,注意类字段和私有方法在 AST 当使用 ESLint 7 时,它们遵循 Babel AST shape;当使用 ESLint 8 时,它们遵循 ESLint 和 ESTree 规范。这是因为 ESLint 从 ESLint 8 开始引入了对这些新的类特性的支持。