You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Next.js 13部署Vercel遇EROFS只读文件系统错误求助

解决Vercel上Next.js 13 API路由无法写入文件的问题

问题根源

Vercel服务器环境里,process.cwd()指向的/var/task是只读文件系统。你把/tmp和它拼接后,实际路径变成了/var/task/tmp——这个目录属于只读区域,自然无法写入文件。而正确的临时目录是系统独立提供的/tmp,并非项目目录下的子目录。

修复方案

改用Node.js的os.tmpdir()获取系统原生的临时目录路径,替换手动拼接的逻辑:

import { join } from 'path';
import { writeFileSync, readFileSync } from 'fs';
import os from 'os';

// 获取Vercel环境下的正确临时目录路径
const USERS_FILE_PATH = join(os.tmpdir(), 'data.json');

// 写入用户列表
writeFileSync(USERS_FILE_PATH, JSON.stringify(users));

// 读取用户列表
const usersData = JSON.parse(readFileSync(USERS_FILE_PATH, 'utf8'));

额外注意事项

  • Vercel的临时目录是每个函数实例独立且临时存在的,函数冷启动或实例重启后,之前写入的文件会被清空,不能用来做持久化存储。如果需要长期保存用户数据,建议使用数据库(如Supabase、PlanetScale)或Vercel KV这类专用存储服务。
  • 本地开发时,os.tmpdir()会指向系统默认的临时目录(比如Windows的C:\Users\<用户名>\AppData\Local\Temp、macOS的/tmp),不影响本地测试读写功能。

内容的提问来源于stack exchange,提问作者Abaga

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 00:02:11