QCon上海站购票倒计时最后3天!查看精彩日程 了解详情
写点什么

Babel 7.7 发布:改进了 TypeScript 支持、顶级作用域 Await 等特性

2020 年 1 月 25 日

Babel 7.7发布:改进了TypeScript支持、顶级作用域Await等特性

最近发布的Babel 7.7 现在可以解析顶级作用域 await、Flow enum 声明(Flow提案)了,并提供了从某些语法错误中恢复的选项。Babel 7.7 现在支持TypeScript 3.7,此外,它还引入了一个全新的可选的 babel.config.json 配置文件,以及其他一些特性和 bug 修复。


顶级作用域 await 使 ECMAScript 模块(ESM)能够 await 资源,从而导致 import 它们的其他模块在评估其主体之前等待。例如,第3阶段提案(Stage 3 proposal )允许开发人员有条件地加载依赖项或执行应用程序初始化:


// 动态依赖路径const strings = await import(`./i18n/${navigator.language}.mjs`);
// 资源初始化const connection = await dbConnector();
复制代码


顶级作用域 await 的使用是基于模块绑定器也是支持它的假设前提的。使用 Rollup 的开发人员可以启用experimentalTopLevelAwait选项。使用 webpack 5 的开发人员可以使用experiments.topLevelAwait选项。启动 Babel 7.7, @babel/preset-env 将自动启用 @babel/plugin-syntax-top-level-await(如果 caller 支持的话)。


默认情况下,每当遇到某些无效语法时,先前版本的 Babel 解析器都会引发错误。尽管这种行为适用于主要的 Babel 用例(比如,转译),但它会给来自其他 Babel 客户端(例如 babel-eslint 或 prettier)的其他用例带来一些不便。 Babel 7.7 在 @babel/parser 中添加了一个新的 errorRecovery 选项。当它设置为 true 时,生成的 AST 将具有 errors 属性,该属性包含了解析器能够从中恢复的所有错误。


Babel7.7 还改进了对TypeScript 3.7的支持。对于 Babel 中自 7.0 以来就支持的可选链(optional chaining) (a?.b) 和空值合并(nullish coalescing)(a ?? b),Babel 7.7 为开发人员提供了使用断言函数对类字段declare的可能性:


function assertString(x): assert x is string {  if (typeof x !== "string") throw new Error("It must be a string!");}
class Developer extends Person { declare usingBabel: boolean;}
复制代码


“allowDeclareFields”标志提供了对类字段的 declare 支持,并且 @babel/plugin-transform-typescript 和 @babel/preset-typescript 都支持“allowDeclareFields”标志。


Babel 7.7.0 还提供了对新 babel.config.json 配置文件的支持,其作用与 babel.config.js 的相同。全新的 JSON 格式具有更好的可缓存性和可序列化性。


Babel 7.7 版本还附带了许多bug的修复和其他改进特性,包括内存使用方面的改进


Babel 是基于 MIT 开源许可的。欢迎开发者通过Babel GitHub组织参与贡献,并且遵循 Babel 的贡献指南行为准则。也可以通过Open Collective的方式进行捐款来支持该项目。


原文链接:


Babel 7.7 Released With Improved TypeScript Support, Top-Level Await and More


2020 年 1 月 25 日 09:003430

评论 1 条评论

发布
用户头像
标题和内容不一致?
2020 年 01 月 30 日 11:44
回复
没有更多了
发现更多内容

为你总结了N个真实线上故障,从容应对面试官!

AI乔治

Java 架构 GC

谷歌朝南,华为朝北

脑极体

它可能是分布式系统中最重要的枢纽

架构师修行之路

分布式 微服务 注册

分布式系统使用网关到底是好还是坏?

架构师修行之路

分布式 微服务 网关

英特尔老矣,尚能“转”否?

脑极体

"全能"人才的概念真的对吗

supernova

创业 读书笔记 随笔杂谈

自我管理系列-为啥要做生产问题分析报告呀

罗小龙

复盘 IT, 经验总结 职场搞笑 生产事故

30 岁的码农人生 ——人生至暗时,你依然能窥见光明

cxuan

程序员 程序人生 感悟

区块链助力跨省、零材料办理 成都武侯打造“中国政务服务第一链”

CECBC区块链专委会

区块链

同学信誓旦旦地说,我司的系统从来不做性能调优!

沉默王二

Java 性能调优

AES加密模式

Mars

AES

LeetCode题解:47. 全排列 II,回溯,JavaScript,详细注释

Lee Chen

算法 LeetCode 前端进阶训练营

算法学习1-- 数组常见问题

菜鸟小sailor 🐕

算法和数据结构

初识Kafka及安装

犟马骝

记一次Jvm参数调优实战

AI乔治

Java 架构 JVM 编程思维 jvm调优

如何在微信公众号图文中插入外链

Ceelog

微信公众号

系统从初期到支撑亿级流量,都经历了哪些架构的变迁?

冰河

分布式 微服务 系统架构 SOA 垂直架构

京东智联云4篇论文入选国际语音顶级大会Interspeech 2020

京东科技开发者

人工智能 大数据 语音识别

什么是动态代理

Rayjun

Java 动态代理

32个问题,学习Java虚拟机的运行时数据区

AI乔治

Java 架构 JVM JVM虚拟机原理

甲方日常 39

句子

工作 随笔杂谈 日常

Dubbo 微服务调用时序图

Acker飏

vim快捷键收藏版

良知犹存

vim

10 张图打开 CPU 缓存一致性的大门

小林coding

缓存 cpu 操作系统 计算机

可视化数据科学中的概率分布以帮你更好地理解各种分布

计算机与AI

学习 数据科学

一次艰难的内存泄露排查,BeanUtils的锅

AI乔治

Java 架构

中国银行前行长李礼辉:区块链技术优势与产业前景

CECBC区块链专委会

区块链 数字货币

JVM系列-第一节:JVM简介、运行时数据区、内存分代模型

诸葛小猿

Java JVM JVM简介 运行时数据区 内存分代模型

谈谈贪官污吏

空山

今天你的idea崩了吗?分享6种“白嫖”正版idea的途径,真香定律

小Q

学习 架构 面试 开发 IntelliJ IDEA

新基建下区块链基础设施建设

CECBC区块链专委会

区块链

Babel 7.7发布:改进了TypeScript支持、顶级作用域Await等特性-InfoQ