7.3.0版发布——命名的捕获组、私有实例访问器和智能管道

175 阅读4分钟

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.07.1.0
方法
class A { #a() {} }7.2.0
访问者
class A { get #a() {} }7.3.0

智能管道操作员

Babel实现了这个提案的多个变体,以帮助TC39测试和收集社区的反馈。与所有建议一样,预计未来会有变化。

Babel 7.2.0中,我们为智能管道运营商提案提供了解析支持。感谢Thiago Arrais的工作,你现在可以把它转译成标准的ECMAScript,并试用它了。

我们目前只支持主要的提议,不支持其他的功能。另外,我们还不支持管道中的yieldawait

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/parserHenry/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 的用户来说是一个合理的假设。

你可以帮助我们,检查这个测试版是否适用于你的项目 🙂