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

Next.js项目自定义文件夹部署到Vercel生产环境无法读取如何解决

问题根因

Next.js部署到Vercel时,运行环境只会保留构建后必要的系统文件、.next构建产物、依赖包等内容,你在根目录自定义的jsonfiles文件夹不属于默认的运行时包含资源,因此部署后会被剔除,自然无法通过相对路径读取到。本地开发时根目录所有文件都完整保留,所以读取不会出错。

可用解决方案

方案1:直接导入JSON(最推荐)

Next.js原生支持直接导入JSON文件,无需使用fs模块读取,完全规避路径问题,性能最优,适合JSON内容无需运行时动态修改的场景:

// 按文件相对路径直接导入即可,构建时会自动处理JSON内容
import list from '../jsonfiles/list.json'
// 无需手动JSON.parse,导入后可直接使用

方案2:将jsonfiles移入public目录

如果你的JSON文件需要同时支持服务端读取和前端直接请求,可以把jsonfiles文件夹整体移动到项目根目录的public文件夹下,public目录的所有资源都会默认被保留到部署环境:

  • 移动后文件路径:public/jsonfiles/list.json
  • 服务端读取代码修改为如下(必须使用绝对路径,不要用相对路径):
const fs = require('fs')
const path = require('path')
// 用process.cwd()拼接绝对路径
const filePath = path.join(process.cwd(), 'public', 'jsonfiles', 'list.json')
const rawContent = fs.readFileSync(filePath, 'utf8')
const list = JSON.parse(rawContent)

前端也可以直接通过/jsonfiles/list.json路径请求该文件。

方案3:配置构建规则保留jsonfiles文件夹

如果你不想修改现有文件夹结构,可以在next.config.js中配置输出文件跟踪规则,强制让Next.js构建时把jsonfiles文件夹纳入运行时资源:

/** @type {import('next').NextConfig} */
const nextConfig = {
  experimental: {
    outputFileTracingIncludes: {
      // 配置所有路由都包含根目录的jsonfiles文件夹
      '/*': ['./jsonfiles/**/*'],
    },
  },
}

module.exports = nextConfig

配置完成后读取文件同样需要使用绝对路径:

const fs = require('fs')
const path = require('path')
const filePath = path.join(process.cwd(), 'jsonfiles', 'list.json')
const rawContent = fs.readFileSync(filePath, 'utf8')
const list = JSON.parse(rawContent)

注意:你原有代码中的fs.readSync是低阶文件操作API,普通读取文件建议使用fs.readFileSync并指定utf8编码,否则会拿到Buffer类型的数据无法直接parse。

内容的提问来源于stack exchange,提问作者Mohammad Reza Hosainy

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 14:54:10