写点什么

Sucrase:一款比 Babel 更快的现代 JS 编译器

  • 2019-07-02
  • 本文字数:1372 字

    阅读完需:约 5 分钟

Sucrase:一款比 Babel 更快的现代 JS 编译器

Sucrase是一款 JavaScript/TypeScript 编译器,目标是提供比标准Babel编译器更快的构建速度。更快的构建意味着更快的迭代,特别是在大型代码基上进行测试的时候。一些测量结果显示,与 Babel 相比,Sucrase 速度提高了 4 至 20 倍。开发人员可以在开发过程中享受这种改进的开发者体验,同时仍然可以在生产环境中使用 Babel。


Sucrase 将自己描述为一个为提升构建速度而推出的“超高速 Babel 替代方案”。在某些限制性的假设前提下,Sucrase 可能比 Babel 提供了显著的速度优势。开发人员可以在Sucrase网站上提供 TypeScript 代码,并通过观察 Sucrase 和 Babel 编译器的结果来评估的 Sucrase 在速度方面的提升。一个默认的示例使用了 20 行代码,速度提升在 4 倍到 7 倍之间变化。Sucrase 在 GitHub 项目主页上提供了一个带有 661K 行代码的大型 TypeScript 代码库示例,其编译速度是 Babel 的 20 倍:



这些速度提升是通过缩减编译器目标范围和牺牲可维护性来实现的。Sucrase 对目标范围缩减的解释如下:


Sucrase 并没有编译大量兼容 Internet Explorer 的 JS 特性,而是假设你正在使用最新的浏览器或 Node.js 版本进行开发,因此它主要编译非标准语言扩展:JSX、TypeScript 和 Flow。


Sucrase 不支持 Node 6 或 Internet Explorer,并且声称只能勉强支持CommonJS和遗留的 TypeScript 和 Babel 5 模块互操作性。由于新的浏览器原生支持大量 JavaScript 语言新特性,并且假设这些特性会被用在开发和测试上下文中,所以 Sucrase 编译器可以专注于更小范围的一组语言特性。除了前面提到的 JSX、TypeScript 和 Flow 之外,它还考虑了其他一些 JavaScript 特性:



还包括特定的转换,用于处理 ES 模块(导入/导出)和使用 React(react-hot-loader)进行开发。上面没有提到的任何 JavaScript 语法都将按原样进行“传递”,并且需要 JavaScript 运行时的支持。开发人员应该检查他们只使用了现代浏览器支持的语言特性(例如,阶段4 ECMAScript特性的子集)。由于 Sucrase 不会检查代码库是否存在错误,所以应该将它与linter或 typechecker 结合在一起使用。


在架构方面,为了获得更好的性能,Sucrase 的语法树转换是复杂且耦合的。因此,Sucrase 不支持插件,并且很难使用新的语言扩展和即将到来的语言特性进行扩展。


Sucrase 试图提供更好的开发者体验,特别是在大型代码库上。因为在大型代码库中,构建速度可能很慢,用于解决构建速度问题的缓存本身可能很脆弱,有时候缓存本身也需要一个缓慢的构建过程。对于测试来说,这个问题特别严重。测试是一个快速迭代的过程,完全可以从改进的编译速度中获益。


然而,Sucrase 并不打算取代 Babel。文档中提到:


在生产环境中使用 Sucrase 之前要仔细考虑好。Sucrase 在开发过程中非常有用,但在其他情况下,Babel 或 tsc 更适合于生产环境的构建。


Sucrase 采用了 MIT 开源许可,它的很大一部分其实是Babel解析器的一个分支,也是基于 MIT 许可。Sucrase 项目欢迎开发者以 bug 报告、拉取请求、文档、测试或其他形式为项目提供帮助。贡献者必须遵循贡献指南


原文链接


Sucrase, a Faster Babel for Modern JS Runtimes


2019-07-02 08:006250
用户头像

发布了 731 篇内容, 共 473.2 次阅读, 收获喜欢 2008 次。

关注

评论 1 条评论

发布
用户头像
js 编译器只是影响开发时间的一些体验吧?如果没有特别的需求需要更换,应该还是会用稳定的 babel,毕竟开启热更新的 webpack 项目每次差异编译也不会超过一秒钟.
2019-07-08 18:18
回复
没有更多了
发现更多内容

是效率利器还是程序黑盒?为什么程序员都抵制低代码?

代码生成器研究

新一轮SocialFi浪潮来袭,Atem Network 再次打响注意力争夺战

股市老人

ETL数据转换工具类型与适用场景

RestCloud

ETL

Linux设备树(DTS)

芯动大师

Linux

WorkPlus AI助理知识问答机器人,助力企业级私有化AI构建

BeeWorks

小程序开发经费紧张,华为云这份省钱秘笈请点赞收藏

YG科技

双11终极之战,华为云耀云服务器L实例点燃狂欢高潮

YG科技

基于javacv的人脸识别和图片内容审核方案

智慧源点

人脸识别 内容审核

C语言与C++语言混合编程的方法

王玉川

c 混合编程 C++

不会写代码了?2分钟看完,这5个技巧你一定要收好。

代码生成器研究

WorkPlus私有化部署的即时通讯软件,企业内部沟通协作的利器

BeeWorks

外贸网站预算持续削减,这个轻量应用服务器搞定老板

YG科技

为什么开发不能兼任测试?普通人不知道的冷知识指南

代码生成器研究

『亚马逊云科技产品测评』活动征文|如何使用Docker compose快速搭建个人博客?

鸽芷咕

Docker 容器 云服务器

WorkPlus Meet视频会议系统,可私有化部署,保障内部数据安全

BeeWorks

从DPlayer说起,有哪些开源的H5播放器

魂祈梦

前端 js

大语言模型|人工智能领域中备受关注的技术

许思王

人工智能 大语言模型

罗拉rola-ip带你看使用代理IP时有哪些小技巧?

Geek_bf375d

罗拉ROLA告诉你如何正确、合理使用静态IP代理?

Geek_bf375d

解锁数据潜力:为什么你应该考虑使用向量数据库

熬夜磕代码、

数据库

客户削减项目开发预算,试试华为云这款轻量应用服务器保质保量

YG科技

内卷出奇迹!华为云耀云服务器L实例凭实力成为_卷王_

平平无奇爱好科技

中小企业如何以最低成本数字化?华为云耀云服务器L实例给出完美答案

平平无奇爱好科技

罗拉rola-ip详解长效代理IP和短效代理IP的区别是什么?

Geek_bf375d

IP长效代理,稳定、高效网络罗拉rola-ip代理服务

Geek_bf375d

企业ERP实施仍存三大难点,华为云耀云服务器L实例助力破局

平平无奇爱好科技

推出链上美债产品的 ProsperEx:RWA 衍生品赛道的早期玩家

股市老人

如何快速将钉钉员工信息同步到飞书

RestCloud

CSS选择器

阡陌r

CSS 选择器 伪元素 伪类

无代码/低代码编程是否走错了路?

代码生成器研究

容器中sh脚本明明存在,为何会报"no such file or directory"的错误?

大伟

git Docker autocrlf

Sucrase:一款比 Babel 更快的现代 JS 编译器_语言 & 开发_Bruno Couriol_InfoQ精选文章