7.3.0 Released: Named capturing groups, private instance accessors and smart pipelines
继 80 次提交以后,最新的小版本 Babel 呈上!
此版本包括对正则表达式中的命名捕获组(named capturing group),私有实例访问器(private instance accessor),智能管道运算符(smart pipeline operator)以及对 TypeScript 解析相关等一系列的改进支持。你可以在 GitHub 上阅读整个更新日志(changelog)。
感谢 @jamesgeorge007 和 @armano2 以及他们的首次 PR!
Bloomberg 正为 Babel 中新 class 功能的实现提供支持:在给我们提供了静态私有字段(static private fields)和私有实例方法(private instance methods)后,他们又相继实现了实例的 getter 和 setter 方法。
另一个好消息是 AMP 项目,它将对 Babel 的赞助增加到 $24k/年,成为核心赞助商。
如果你或你的公司想要支持 Babel 和 JavaScript 的发展,但不知如何做,你可以通过 OpenCollective 向我们捐款,更好的一种选择是直接与我们合作实现新的 ECMAScript 提案!作为一个志愿者驱动的项目,我们依靠社区的支持来资助我们的工作,以帮助大部分的 JavaScript 用户并获得代码的所有权。
#9101)
私有实例访问器(getter 和 setter)(class Person {
#firstname = "Babel";
#lastname = "JS";
get #name() {
return this.#firstname + " " + this.#lastname;
}
sayHi() {
alert(`Hi, ${this.#name}!`);
}
}
感谢 Tim (Bloomberg) 实现了该提案!
如果你还未在 Babel 7.2.0 中添加它,你可以通过在配置文件中添加 @babel/plugin-proposal-private-methods
来测试该功能,或者你可以在 repl 启用 stage-3
preset 在线测试该功能。
类私有化功能(class private feature)的支持已基本完成!
类私有化 | 实现 | 静态 |
---|---|---|
Fields class A { #a = 1} | 7.0.0 | 7.1.0 |
方法 class A { #a() {} } | 7.2.0 | ✖ |
访问器 class A { get #a() {} } | 7.3.0 | ✖ |
#9179)
智能管道操作符(Babel 实现了该提案的多种形式,以帮助 TC39 测试并收集社区的反馈建议。与所有提案一样,预计在未来会发生变化。
在 Babel 7.2.0 中增加了对 智能管道操作符(smart pipeline operator) 提案解析的支持。感谢 Thiago Arrais 所作的工作,你现在可以将其转换为标准的 ECMAScript 并试用它!
我们目前仅支持主要提案,暂不支持其他任何额外功能。另外,我们还不支持管道中使用 yield
和 await
。
name
|> # || throw new TypeError()
|> doubleSay(#, ', ')
|> capitalize
|> # + '!'
|> new User.Message(#)
|> stream.write(#, { sync: true })
|> console.log;
你可以在你的项目中使用 @babel/plugin-proposal-pipeline-operator
插件并启用 proposal: "smart"
选项,来使用该提案:
{
"plugins": [
["@babel/plugin-proposal-pipeline-operator", { "proposal": "smart" }]
]
}
在这之前,Babel 通过 #6335 在 [v7.0.0-beta.3] 中添加了一个"简易"版本提案的实现。
#7105)
命名捕获组(named capturing group)(let stringRe = /(?<quote>"|')(?<contents>.*?)\k<quote>/;
let { contents } = `"foo bar"`.match(stringRe);
Babel 中 ECMAScript 2018 功能缺失最大的部分就是该功能!在这之前,Dmitry Soshnikov 为社区提供了很棒的插件 babel-plugin-transform-modern-regexp 可以获得对命名组部分功能的支持。我们还与 code-js
进行了协调工作,为新的 @babel/plugin-transform-named-capturing-groups-regex
package 提供全面支持。
@babel/preset-env
也已经更新,引入了该 package,因此,当使用它时并不需要做任何改动!
注意,运行时功能(即:groups
属性)仅适用于对 ES6 正则表达式正确支持的浏览器。如果您需在旧的环境中支持,可以在 RegExp
的方法中引入 polyfill。
#9302,#9309)
TypeScript 更新 (感谢 Armano 在 @babel/parser
中的工作以及 Henry/Brian 在 @babel/generator
中的工作(回顾直播),我们现在支持了 let x: typeof import('./x');
,此功能添加于 TypeScript 2.9 中。同时还支持了 TypeScript 3.2 中添加的 bigint
类型关键字。
babel-eslint
v11.0.0-beta.0:通过读取配置自动进行语法检测(babel/babel-eslint#711)
感谢 Kai (负责 TSC 的 ESLint 维护) 完成这项工作!
到目前为止,babel-eslint
已手动启用所有语法插件(列表经常过时)。它还意味着它可以解析 Babel 本身配置的实例,在编译时不允许的语法。我们现在要去 @babel/core
作为 peerDependency ,并假设在使用 babel-eslint
时使用 Babel 配置,并使用相同的配置来修改自身(使其成为一个重大的变化)。这种改变有望使维护模块本身更易于管理,并重新使用 Babel 配置,这是用户使用 babel-eslint
的合理假设。
你可以通过检查此测试版是否适用于您的项目来帮助我们 🙂