Turbopack
Turbopack 是一个专为 JavaScript 和 TypeScript 优化的增量打包工具,用 Rust 编写,并内置到 Next.js 中。你可以在 Pages 和 App 路由中使用 Turbopack,获得更快的本地开发体验。
为什么选择 Turbopack?
我们构建 Turbopack 是为了推动 Next.js 的性能,包括:
- 统一图: Next.js 支持多个输出环境(例如,客户端和服务器)。管理多个编译器并拼接包可能很繁琐。Turbopack 为所有环境使用单一的、统一的图。
- 打包 vs 原生 ESM: 一些工具在开发中跳过打包,依赖浏览器的原生 ESM。这对于小型应用程序效果很好,但由于过多的网络请求,可能会减慢大型应用程序的速度。Turbopack 在开发中打包,但以优化的方式保持大型应用程序的快速。
- 增量计算: Turbopack 跨核心并行化工作并缓存结果到函数级别。一旦完成一项工作,Turbopack 就不会重复它。
- 懒加载打包: Turbopack 只打包开发服务器实际请求的内容。这种懒加载方法可以减少初始编译时间和内存使用。
开始使用
要在你的 Next.js 项目中启用 Turbopack,请在 package.json
文件的 dev
和 build
脚本中添加 --turbopack
标志:
package.json
{
"scripts": {
"dev": "next dev --turbopack",
"build": "next build --turbopack",
"start": "next start"
}
}
目前,Turbopack 的 dev
模式是稳定的,而 build
模式处于 alpha 阶段。随着 Turbopack 接近稳定性,我们正在积极开发生产支持。
支持的功能
Next.js 中的 Turbopack 对常见用例具有零配置。以下是开箱即用支持的功能摘要,以及一些关于如何在需要时进一步配置 Turbopack 的参考。
语言功能
功能 | 状态 | 说明 |
---|---|---|
JavaScript & TypeScript | 支持 | 底层使 用 SWC。类型检查不由 Turbopack 完成(运行 tsc --watch 或依赖你的 IDE 进行类型检查)。 |
ECMAScript (ESNext) | 支持 | Turbopack 支持最新的 ECMAScript 功能,匹配 SWC 的覆盖范围。 |
CommonJS | 支持 | require() 语法开箱即用。 |
ESM | 支持 | 静态和动态 import 完全支持。 |
Babel | 部分不支持 | Turbopack 默认不包含 Babel。但是,你可以通过 Turbopack 配置配置 babel-loader 。 |
框架和 React 功能
功能 | 状态 | 说明 |
---|---|---|
JSX / TSX | 支持 | SWC 处理 JSX/TSX 编译。 |
Fast Refresh | 支持 | 无需配置。 |
React Server Components (RSC) | 支持 | 适用于 Next.js App 路由。Turbopack 确保正确的服务器/客户端打包。 |
Root layout creation | 不支持 | App 路由中自动创建根布局不受支持。Turbopack 将指导你手动创建它。 |
CSS 和样式
功能 |
---|