Vercel部署graphql-codegen端点报错:找不到指定路径的GraphQL类型定义
你的猜测是对的,Vercel 构建流程默认只会将识别为运行时必要的文件打包到最终部署产物中,.gql 后缀的 schema 文件默认不会被保留,导致运行时加载路径匹配不到文件,对应报错如下:
Unable to find any GraphQL type definitions for the following pointers:
- ./src/graphql/server/schema/*.gql
方案1:配置Vercel保留指定.gql文件
在项目根目录新建/修改vercel.json,添加配置指定部署时需要保留的文件:
{ "functions": { "app/api/**/*.{ts,tsx}": { // 此处替换为你的接口路由所在路径 "includeFiles": "src/graphql/server/schema/*.gql" } } }
如果你的路由存放在pages目录下,将路径改为pages/api/**/*.{ts,tsx}即可。
方案2:预编译schema为TS文件(更推荐)
直接通过graphql-codegen提前把schema内容编译成可导入的TS代码,完全避免运行时加载.gql文件的依赖:
- 修改codegen配置,新增生成schema的输出项:
# codegen.yml 对应配置 generates: ./src/generated/schema.ts: plugins: - "schema-ast" config: includeDirectives: true
- 构建时会自动生成导出schema字符串的TS文件,直接导入使用即可,替换原有加载逻辑:
import { schema } from './generated/schema' // 无需再用loadSchemaSync读取.gql文件
方案3:构建阶段主动复制.gql文件到输出目录
如果使用Next.js框架,可在next.config.js中添加webpack配置复制文件:
const CopyPlugin = require("copy-webpack-plugin"); module.exports = { webpack: (config) => { config.plugins.push( new CopyPlugin({ patterns: [ { from: "./src/graphql/server/schema", to: "src/graphql/server/schema" }, ], }) ); return config; }, };
如果是普通Node项目,直接修改package.json的build命令,构建完成后主动复制文件:
{ "scripts": { "build": "tsc && cp -r ./src/graphql/server/schema ./dist/graphql/server/schema" } }
本地验证方法
修改配置后可以先在本地执行构建命令,检查构建输出目录中是否存在对应的.gql文件,确认存在后再部署到Vercel即可避免报错。
内容的提问来源于stack exchange,提问作者neeko
相关产品推荐
相关产品推荐

