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

如何阻止GraphQL Codegen生成的index.ts重导出以解决Next.js生产报错?

解决Next.js生产环境GraphQL Codegen重导出错误问题

问题原因

Next.js生产构建会严格校验模块导出逻辑,自动生成的index.ts中使用的export *重导出语法,可能因类型处理或潜在循环依赖触发构建错误。

方案一:禁用自动生成index.ts

直接在Codegen配置中关闭index.ts的自动生成,避免重导出问题:

import type { CodegenConfig } from '@graphql-codegen/cli';

const config: CodegenConfig = {
  overwrite: true,
  schema: 'schema.graphql',
  documents: 'src/**/*.graphql',
  generates: {
    'src/pages/api/graphql/generated/': {
      preset: 'client',
      plugins: [],
      config: {
        generateIndex: false // 禁用自动生成index.ts
      },
    },
    './graphql.schema.json': {
      plugins: ['introspection'],
    },
  }
};

export default config;

修改后,直接从fragment-masking.ts和gql.ts文件中导入所需类型,跳过聚合导出的index.ts。

方案二:自定义脚本修复导出语法

若需要保留聚合导出的index.ts,可添加一个生成后脚本,将export *替换为类型安全的导出方式:

  1. 更新package.json中的codegen脚本,添加后续处理步骤:
{
  "scripts": {
    "codegen": "graphql-codegen && node fix-export.js"
  }
}
  1. 创建fix-export.js脚本,修改生成的index.ts内容:
const fs = require('fs');
const path = require('path');

const targetFile = path.join(__dirname, 'src/pages/api/graphql/generated/index.ts');
const fixedContent = `
import type * as FragmentMasking from './fragment-masking';
import type * as Gql from './gql';

export type { FragmentMasking, Gql };
`;

fs.writeFileSync(targetFile, fixedContent.trim());

该脚本会将原始的重导出改为明确的类型导入与导出,适配Next.js生产构建的校验规则。

方案推荐

优先选择方案一,无需额外脚本维护,直接通过配置修改解决问题;若业务场景需要聚合导出,再使用方案二做后续处理。

内容的提问来源于stack exchange,提问作者AbdulGafar Olamide Ajao

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 08:53:25