👇 今日要闻
打破信息壁垒,走近全球前端。Hello 大家好,我是林语冰。
Babel 团队官宣,Babel 8 正式发布,主要包括:
- Babel 8 现在只支持 纯 ESM 模块(ESM-only)
- 所有 Babel 官方模块都内置了 TypeScript 类型定义
- 默认不再编译为 ES5 和 CommonJS

Babel 8 的重心不在于添加大量新功能,而是针对 Babel 自身架构的现代化改造。
本期我们会看到,从 Babel 7 升级到 Babel 8 不会像以前一样存在很多阻力,本次主版本升级会更加丝滑。
👉 Babel 8 重大更新
Babel 8 要求 Node.js 最低版本至少为 Node 22+,因为 Node 20.x 已经停止维护。
Babel 团队推荐使用 Node 24 ,这是 Node.js 的 LTS(长期支持版),支持 require(esm) 这种 CJS 和 ESM 模块混合导入的功能。
之前,Babel 7 编译的输出目标是兼容所有浏览器,而现在 Babel 8 默认的输出目标是尽量兼容大多数 现代浏览器。
在 babel.config.json 中的默认配置变化如下:

同时,Babel 8 现在只以原生 ESM 模块 发布,所有官方模块不再提供 CJS 等其他非标准模块格式。
此外,现在所有 Babel 官方模块都内置 TS 类型,这意味着你现在可以在 TS 项目中使用 Babel 编程式 API,无需安装 @types/babel__* 等类型定义模块作为开发依赖。
当使用 Babel API 开发插件或直接把 Babel 作为工具库导入使用时,也要注意 Babel 8 API 的变化。
举个栗子,Babel 8 的 AST(抽象语法树)和之前有所不同:

上面这段 JS 动态导入的源码会生成下列 AST:

可以看到,现在 Babel 8 的 AST 和之前略有不同,实际操作 AST 时要注意这个区别,另请参考 Babel 官网提供的《Babel 8 API 升级指南》。
👉 Babel 插件的变化
Babel 8 中,所有预设和插件都要求 @babel/core@^8 作为对等依赖(peerDependencies)。
如果你想进一步把 Babel 8 和 ESLint 结合使用,那么 @babel/eslint-parser 和 @babel/eslint-plugin 还要求至少升级到 ESLint 9,这两个模块不再支持 ESLint 7 和 ESLint 8。
另外,@babel/preset-env 预设环境默认不再把代码编译为 ES5,而且会编译为 ESM 模块而不是 CJS 模块。
作为新版替代方案,@babel/preset-env 的 target 选项会继承顶层 @babel/core 的同名配置,所以目前 Babel 8 默认的编译目标是 ES2023。
因为 Babel 8 现在默认会采用 browserslist(浏览器列表)的 defaults 查询结果,这是一个针对全球浏览器兼容性和采用率自动更新的动态编译目标。
随着 IE 浏览器的退役和 ES6 的普及,这是一个与时俱进的改动。但如果你确实需要编译到 ES5 去支持旧版浏览器,你可以在 Babel 的配置中手动自定义 targets 或创建 .browserslistrc 配置。
注意,生态相关插件也从 Babel 7.22 开始重命名,插件模块名从 ...-proposal-... 重命名为 ...-transform-...,这标志着这些插件对应的 JS 提案已经正式到达 Stage4 了。
示例如下:
| Babel 7 | Babel 8 |
|---|---|
@babel/plugin-proposal-dynamic-import |
@babel/plugin-transform-dynamic-import |
@babel/plugin-proposal-json-modules |
@babel/plugin-transform-json-modules |
| ... | ... |
安装上述插件或升级 Babel 项目时,插件名称需要同步更新。
另外一个配置的重大变化是,以前在 @babel/preset-env 预设或其他插件中,Babel 一直支持 loose 和 spec 选项,用于调节编译兼容性、性能和体积等。
现在,Babel 8 不推荐使用 loose 和 spec 选项,直接从 @babel/preset-env 中删除,其他插件也慎用这两个配置。
举个栗子,以前的 spec 选项现在等价于下列配置:

可以看到,替代方案是优先使用 assumptions 选项,这个配置从 Babel 7.13 次版本开始就已经支持,Babel 8 强烈推荐全面采用。
针对 polyfill(功能补丁),Babel 8 不建议使用 @babel/preset-env 的 useBuiltIns 选项,以及 @babel/plugin-transform-runtime 的 corejs 选项。
Babel 8 推荐将其删除,改用 babel-plugin-polyfill-corejs3,它提供了一种控制 core-js 注入的集中式方案。
由于 core-js@2 已经多年没有维护了,你应该改用 core-js@3,在 babel.config.json 中更新下面的插件配置:

👉 Babel 生态现状
随着 Babel 8 稳定,Babel 7 将暂停移植修复补丁和新功能。但仍会提供一年的安全支持,直至明年 6 月。
目前为止,尤雨溪公司的 Oxc 等原生编译器尚未对 Babel 造成致命打击。
Babel 依然是前端工程优雅降级的流行转译器,它的周下载量从 2018 年的 170 万次,暴涨到今年 6.51 亿次。

鉴于 Babel 在前端工程依然举足轻重,我们还是要继续投入精力掌握它。Babel 官方也提供了详细的《Babel 8 升级指南》。
👇 重点总结
Babel 团队官宣,Babel 8 正式发布,主要包括:
- Babel 8 现在只支持 纯 ESM 模块
- 默认编译为 ES2023 而非 ES5,现代浏览器优先
- 插件配置更新,成熟模块重命名等
👍 以上就是本期《前端日报》的全部内容了,如果读完对你有所帮助,可以按赞打卡、在看推荐或转发分享。
🙏 已经关注我的粉丝们,我们下期再见啦,掰掰~~

👇 参考文献:
- 🔗 Babel 8 官方博客 :babeljs.io/blog/2026/0...
- 🔗 Babel 8 升级指南 :babeljs.io/docs/v8-mig...
- 🔗 Babel 8 API 升级指南 :babeljs.io/docs/v8-mig...