如何禁止 Next.js 在构建完成后写入缓存?
支持。使用 Turbopack 构建时,可以在 next.config.ts 中设置 experimental.turbopackFileSystemCacheForBuild: false,关闭构建阶段的文件系统缓存。
Turborepo 也会输出 Finishing writing to cache... 这条提示。如果通过 turbo run build 执行构建,还需要检查 Turborepo 的任务缓存。只修改 Next.js 配置,可能无法消除这段等待。相关日志示例
关闭 Next.js 的 Turbopack 构建缓存
将以下配置合并到项目已有的 next.config.ts 中:
import type { NextConfig } from 'next'
const nextConfig: NextConfig = {
experimental: {
turbopackFileSystemCacheForBuild: false,
},
}
export default nextConfig
如果已有其他 experimental 选项,保留原有设置,只添加这一项。保存后,重新执行原来的构建命令。
这个选项控制 next build 使用的 Turbopack 文件系统缓存。开发服务器的缓存由 turbopackFileSystemCacheForDev 控制,关闭构建缓存时无需修改它。Next.js 官方配置文档
为什么需要区分 Next.js 16 的具体版本
Turbopack 会把编译工作保存到磁盘,供后续构建复用,因此缓存可能有助于频繁重复构建。关闭缓存可以省去相关写入,但后续构建也需要重新完成原本可以复用的工作。总耗时能否减少,要看项目情况。
根据官方版本记录,构建和开发缓存的独立配置项在 Next.js 16.0.0 中进入 Beta,构建缓存从 16.3.0 开始默认开启。判断项目是否默认启用了构建缓存,需要确认具体版本,不能只看是否使用 Next.js 16。官方版本记录
如果提示来自 Turborepo
先查看 package.json 中的构建脚本。如果执行的是 turbo build 或 turbo run build,Turborepo 会在 Next.js 构建之外管理一层任务缓存。
如果当前 Turborepo 版本支持 --cache 参数,可以让本次执行只读取缓存,不再写入:
npx turbo run build --cache=local:r,remote:r
其中 r 表示只读。要完全禁用本次执行的本地和远程任务缓存,可以使用:
npx turbo run build --cache=local:,remote:
这些参数只控制 Turborepo 的任务缓存,Next.js 内部的 Turbopack 缓存仍由 Next.js 配置控制。Turborepo 命令文档
如果要持续禁用 build 任务的缓存,可以在已有 turbo.json 的对应任务中加入:
{
"tasks": {
"build": {
"cache": false
}
}
}
合并配置时,保留任务原有的 dependsOn 等设置。设置 "cache": false 后,该任务每次都会实际执行,并停止缓存输出。Turborepo 配置文档
注意事项
turbopackFileSystemCacheForBuild只适用于 Turbopack,无法解决 webpack 构建的缓存问题。- 关闭编译缓存后,Next.js 仍会生成正常的
.next构建产物。这个选项无法禁止所有磁盘写入。 - 不要用
turbo run build --force代替关闭缓存。--force会忽略已有缓存并重新执行任务,但仍会写入缓存。--force的官方说明
备注:内容仅供参考。
