Babel 中文文档
  • 印记中文
  • 文档
  • 配置
  • 试用
  • 视频
  • 博客
  • 赞助
  • 团队
  • GitHub

›All Blog Posts

All Blog Posts

  • 7.19.0 Released: Stage 3 decorators and more RegExp features!
  • 7.18.0 Released: Destructuring private elements and TypeScript 4.7
  • 7.17.0 Released: RegExp 'v' mode and ... 🥁 decorators!
  • 7.16.0 发布: ESLint 8 和 TypeScript 4.5
  • 7.15.0 发布:支持 Hack-style 管道, TypeScript 枚举常量和 Rhino 目标
  • Babel is used by millions, so why are we running out of money?
  • 7.14.0 Released: New class features enabled by default, TypeScript 4.3, and better CommonJS interop
  • 7.13.0 Released: Records and Tuples, granular compiler assumptions, and top-level targets
  • 7.12.0 Released: TypeScript 4.1, strings as import/export names, and class static blocks
  • 7.11.0 Released: ECMAScript 2021 support in preset-env, TypeScript 4.0 support, printing config and the future of `babel-eslint`
  • The State of babel-eslint
  • 7.10.0 Released: Class Fields in preset-env, '#private in' checks and better React tree-shaking
  • 7.9.0 Released: Smaller preset-env output, Typescript 3.8 support and a new JSX transform
  • 7.8.0 Released: ECMAScript 2020, .mjs configuration files and @babel/cli improvements
  • Babel's Funding Plans
  • 7.7.0 Released: Error recovery and TypeScript 3.7
  • 7.6.0 Released: Private static accessors and V8 intrinsic syntax
  • 7.5.0 Released: dynamic import and F# pipelines
  • The Babel Podcast
  • 7.4.0 Released: core-js 3, static private methods and partial application
  • 7.3.0 Released: Named capturing groups, private instance accessors and smart pipelines
  • 7.2.0 发布:私有实例方法(Private Instance Methods)
  • 在 Babel 中支持 TC39 标准的装饰器
  • 7.1.0 Released: Decorators, Private Static Fields
  • Babel 7 发布
  • Removing Babel's Stage Presets
  • What's Happening With the Pipeline (|>) Proposal?
  • Announcing Babel's New Partnership with trivago!
  • On Consuming (and Publishing) ES2015+ Packages
  • Nearing the 7.0 Release
  • Babel Turns Three
  • Planning for 7.0
  • Zero-config code transformation with babel-plugin-macros
  • Contributing to Babel: Three Lessons to Remember
  • Personal Experiences at Babel #1 — A PR with Unusually High Number of Reviews
  • Babel and Summer of Code 2017
  • Upgrade to Babel 7 (moved)
  • Upgrade to Babel 7 for Tool Authors (WIP)
  • 6.23.0 Released
  • The State of Babel
  • 6.19.0 Released
  • 6.18.0 Released
  • 6.16.0 Released
  • Babili (babel-minify)
  • 6.14.0 Released
  • Babel Doctor
  • Setting up Babel 6
  • 6.0.0 Released
  • React on ES6+
  • Function Bind Syntax
  • 5.0.0 Released
  • Babel 喜爱 React
  • 并非出生而逐渐走向灭亡
  • 2to3
  • 6to5 + esnext

7.3.0 Released: Named capturing groups, private instance accessors and smart pipelines

January 21, 2019

Nicolò Ribaudo

继 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 用户并获得代码的所有权。

私有实例访问器(getter 和 setter)(#9101)

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.07.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] 中添加了一个"简易"版本提案的实现。

命名捕获组(named capturing group)(#7105)

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。

TypeScript 更新 (#9302,#9309)

感谢 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 的合理假设。

你可以通过检查此测试版是否适用于您的项目来帮助我们 🙂


在 Twitter 上讨论

Recent Posts
Babel 中文文档
文档
学习 ES2015
社区
视频用户Stack OverflowSlack 频道Twitter
更多
博客GitHub 组织GitHub 仓库Website 仓库旧版网址 6.x旧版网址 5.x