NextJS API路由中文件路径无法解析,如何获取正确路径?
解决NextJS API路由在Vercel部署时的文件路径问题
从日志路径/var/task/packages/project-root/img/file.svg能看出,你的项目属于monorepo结构,在Vercel部署时process.cwd()返回的是整个仓库的根目录(/var/task),而非NextJS应用所在的子目录,这就导致路径拼接后找不到目标文件。
可以通过以下两种方式修复:
方法1:基于__dirname拼接路径
API路由文件的__dirname指向当前路由文件的所在目录,以此为基准向上回溯到目标文件的位置,这种方式在本地和Vercel环境下都能正常工作:
const path = require('path'); const fs = require('fs'); // 假设API路由文件位于 packages/project-root/pages/api/xxx.js const svg = fs.readFileSync( path.join(__dirname, '../../img/file.svg'), 'utf-8', );
方法2:明确指定子目录路径
如果项目结构固定,直接在process.cwd()后拼接NextJS应用所在的子目录路径:
const path = require('path'); const fs = require('fs'); const svg = fs.readFileSync( path.join(process.cwd(), 'packages/project-root', 'img', 'file.svg'), 'utf-8', );
额外需要确认两点:
img/file.svg确实存在于本地项目的对应目录中- 该文件已提交至Git仓库(Vercel部署仅拉取Git仓库内的文件,会忽略
.gitignore标注的内容)
内容的提问来源于stack exchange,提问作者supersize
相关产品推荐
相关产品推荐

