7.3.0版发布——命名的捕获组、私有实例访问器和智能管道
经过80多次的提交,最新的Babel次要版本来了!
该版本包括支持正则表达式中的命名捕捉组、私有实例访问器、智能管道操作器以及对TypeScript解析的大量改进。你可以在GitHub上阅读整个更新日志。
感谢@jamesgeorge007和@armano2的第一个PR!
彭博社继续赞助Babel中新类功能的实现:在给我们提供静态私有字段和私有实例方法之后,他们刚刚实现了私有实例的getters和setters。
另一个值得一提的是AMP项目,他们将对Babel的支持增加到了2.4万美元/年,成为了基本支持赞助商。
如果你或你的公司想支持Babel和JavaScript的发展,但不确定如何支持,你可以在OpenCollective上向我们捐款,更好的是,你可以直接和我们一起实施新的ECMAScript提案!作为一个由志愿者驱动的项目,我们依靠社区的支持,既为我们支持广大的JavaScript用户的努力提供资金,也为代码的所有权提供资金。
私有实例访问器(getters和setters)
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 ,或者在在线复制中启用stage-3 预设,您可以通过添加到您的配置中来测试这个新功能。
类私有功能支持基本完成!
| 类的私有性 | 实例 | 静态 |
|---|---|---|
| 字段 | ||
class A { #a = 1} | 7.0.0 | 7.1.0 |
| 方法 | ||
class A { #a() {} } | 7.2.0 | ✖ |
| 访问者 | ||
class A { get #a() {} } | 7.3.0 | ✖ |
智能管道操作员
Babel实现了这个提案的多个变体,以帮助TC39测试和收集社区的反馈。与所有建议一样,预计未来会有变化。
在Babel 7.2.0中,我们为智能管道运营商提案提供了解析支持。感谢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" }]
]
}
之前,"最小 "的建议早在[v7.0.0-beta.3]中通过#6335添加进来了
命名的捕获组
let stringRe = /(?<quote>"|')(?<contents>.*?)\k<quote>/;
let { contents } = `"foo bar"`.match(stringRe);
对Babel中缺少的最大的ECMAScript 2018功能的支持现在在这里!此前,对命名组的部分支持是通过Dmitry Soshnikov的超棒的babel-plugin-transform-modern-regexp社区插件实现的。我们还与core-js 协调,通过新的@babel/plugin-transform-named-capturing-groups-regex 软件包提供全面支持。
@babel/preset-env 我们已经更新了这个插件,所以你们中的许多人不需要做任何改动就可以使用它了。
请注意,运行时功能(即groups 属性)只在对ES6正则表达式有适当支持的浏览器中工作。如果你需要支持旧的环境,你可以为RegExp'的方法包含一个polyfill。
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(也是ESLint TSC的成员)完成了这项工作
到现在为止,babel-eslint 已经手动启用了所有的语法插件(列表经常过时)。这也意味着它可以解析Babel本身配置的实例在编译时不允许的语法。现在,我们要求@babel/core 作为对等依赖,并假定在使用babel-eslint 时存在一个Babel配置,并使用同一配置来修改自己(这是个突破性的变化)。这一改变希望能使维护模块本身更容易管理,同时也能重新使用Babel的配置,这对使用babel-eslint 的用户来说是一个合理的假设。
你可以帮助我们,检查这个测试版是否适用于你的项目 🙂