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

如何在Next.js应用中为单个JSON文件禁用resolveJsonModule

针对Next.js大型JSON导入类型解析溢出的最优解决方案

方案1:声明JSON文件固定类型(最推荐)

直接为该JSON文件创建配套的类型声明文件,让TypeScript直接使用你定义的类型,无需动态解析JSON内容生成类型,完全规避性能问题:

  1. 在JSON文件所在的data目录下新建同名声明文件all-food-data.json.d.ts,内容如下:
import type { FoodItem } from '../你的FoodItem类型定义文件路径';

declare const allFoodData: FoodItem[];
export default allFoodData;
  1. 原来的导入代码不需要做任何修改,TypeScript编译时会优先读取你写的声明文件,不会再解析JSON本身的结构,从根源解决内存溢出问题。

方案2:导入时跳过类型检查

如果不想额外写声明文件,可以在导入JSON的语句上添加单行类型忽略注释,直接跳过该导入的类型校验:

// @ts-expect-error 跳过大型JSON的自动类型解析,手动断言类型
import allFoodOriginal from '../data/all-food-data.json'

const allFood = allFoodOriginal as FoodItem[]

该方案改造成本极低,适合临时快速修复。

方案3:使用require导入替代import

ES模块方式导入JSON会触发TypeScript的类型解析,改用CommonJS的require导入即可避免该逻辑:

const allFoodOriginal = require('../data/all-food-data.json') as FoodItem[]

修复fs加载方案的报错问题

你之前用fs加载出现404/500是因为Vercel构建时没有把JSON文件包含到运行时依赖中,可以在next.config.js中添加配置指定要包含的文件:

module.exports = {
  experimental: {
    outputFileTracingIncludes: {
      // 替换为你用到该JSON的页面路由,比如'/*'代表所有页面都可以访问
      '/*': ['./data/**/*.json'],
    },
  },
}

配置完成后,在getStaticProps中调用fs读取的逻辑就可以在Vercel正常运行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 22:06:04