Next.js 与 Turbopack
Next.js 16+ 在本地开发中默认使用 Turbopack:这是一个用 Rust 编写的增量打包器,能显著加速开发启动和热更新。
何时使用
- Turbopack(默认开发模式):日常开发推荐使用。冷启动和 HMR 更快,尤其在大型应用中。
- Webpack(传统开发模式):仅当遇到 Turbopack 缺陷或在开发中依赖 webpack 专属插件时使用。可通过
--webpack(或--no-turbopack,具体取决于你的 Next.js 版本,请查阅官方文档)禁用。 - 生产构建:
next build的行为可能使用 Turbopack 或 webpack,取决于 Next.js 版本;请查阅对应版本的官方文档。
适用场景:开发或调试 Next.js 16+ 应用、诊断慢速开发启动或 HMR、优化生产包体积。
工作原理
- Turbopack:针对 Next.js 开发环境的增量打包器。利用文件系统缓存,使重启速度大幅提升(例如在大项目中提速 5–14 倍)。
- 开发模式默认启用:从 Next.js 16 开始,
next dev默认使用 Turbopack,除非显式禁用。 - 文件系统缓存:重启时复用之前的构建成果;缓存通常存放在
.next目录下,无需额外配置。 - Bundle Analyzer(Next.js 16.1+):实验性包分析工具,用于检查输出并发现大型依赖;可通过配置或实验性标志启用(详见对应版本文档)。
示例
命令
next dev
next build
next start
用法
运行 next dev 即可使用 Turbopack 进行本地开发。使用 Bundle Analyzer(参见 Next.js 文档)优化代码分割并精简大型依赖。优先使用 App Router 和服务器组件。
中间件文件命名
Next.js 16 引入了 proxy.ts 作为中间件文件名,取代了之前的 middleware.ts 约定:
- Next.js 16+:在项目根目录使用
proxy.ts - Next.js 16 之前:在项目根目录使用
middleware.ts
文件名变更与 Next.js 版本 相关,与使用的打包器(Turbopack 或 webpack)无关。请始终查阅你所用版本的官方文档。
不要在 Next.js 16 项目中将 proxy.ts 标记为命名错误或缺失的中间件文件。 该文件名是正确且有意为之。建议重命名为 middleware.ts 会破坏中间件的执行。
参考: Next.js proxy 文档
最佳实践
- 使用最新的 Next.js 16.x 版本以确保 Turbopack 和缓存行为的稳定性。
- 如果开发缓慢,请确保已启用 Turbopack(默认),并且缓存未被不必要地清除。
- 对于生产包体积问题,请使用你版本对应的官方 Next.js 包分析工具。