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

禁用Introspection时,如何在生产环境用code-gen生成类型?

解决禁用自省的生产环境中生成GraphQL类型的方案

针对你的场景,有几个实用的方案可以实现Docker构建时生成类型,无需提交code-gen输出到仓库:

方案一:开发阶段导出Schema文件,Docker构建时本地生成(推荐)

核心思路是在开发环境利用自省导出完整的GraphQL Schema文件,将这个源文件提交到仓库,Docker构建时基于本地Schema生成类型,完全不依赖生产环境的自省接口。

步骤:

  1. 开发环境导出Schema
    执行命令导出开发环境API的Schema到本地文件(比如schema.graphql):

    npx graphql-codegen introspect-schema http://your-dev-api/graphql --output schema.graphql
    

    将生成的schema.graphql加入Git版本控制。

  2. 修改code-gen配置
    调整codegen.ts,将Schema来源从远程API地址改为本地文件:

    import type { CodegenConfig } from '@graphql-codegen/cli';
    
    const config: CodegenConfig = {
      schema: './schema.graphql', // 指向本地Schema文件
      documents: ['./src/**/*.graphql', './src/**/*.{ts,tsx}'], // 扫描你的GraphQL查询/突变文件
      generates: {
        './src/generated/graphql.ts': {
          plugins: ['typescript', 'typescript-operations', 'typescript-react-apollo'],
        },
      },
    };
    
    export default config;
    
  3. Dockerfile中添加生成步骤
    在构建镜像时,先安装依赖,再运行code-gen生成类型,最后构建Next.js应用:

    FROM node:20-alpine
    
    WORKDIR /app
    
    # 复制依赖配置文件,利用Docker缓存
    COPY package*.json ./
    RUN npm ci
    
    # 复制项目代码(包括schema.graphql和code-gen配置)
    COPY . .
    
    # 运行code-gen生成类型文件
    RUN npm run codegen
    
    # 构建Next.js生产包
    RUN npm run build
    
    CMD ["npm", "start"]
    

方案二:给生产API的自省接口加IP白名单

如果生产API是你们团队维护的,可以给自省接口添加IP权限控制,仅允许Docker构建服务器的IP访问,这样构建时就能直接从生产API获取Schema生成类型。

步骤:

  1. 配置API的自省权限
    在GraphQL API的服务端(比如Apollo Server)中,添加IP白名单逻辑,只有Docker构建环境的IP能触发自省查询。

  2. 通过环境变量切换Schema来源
    修改codegen.ts支持环境变量指定Schema地址:

    import type { CodegenConfig } from '@graphql-codegen/cli';
    
    const config: CodegenConfig = {
      schema: process.env.GRAPHQL_API_URL || './schema.graphql',
      documents: ['./src/**/*.graphql', './src/**/*.{ts,tsx}'],
      generates: {
        './src/generated/graphql.ts': {
          plugins: ['typescript', 'typescript-operations', 'typescript-react-apollo'],
        },
      },
    };
    
    export default config;
    
  3. Docker构建时传入生产API地址
    在Dockerfile中设置环境变量,运行code-gen:

    FROM node:20-alpine
    
    WORKDIR /app
    
    COPY package*.json ./
    RUN npm ci
    
    COPY . .
    
    # 设置生产API地址,确保构建服务器IP在白名单内
    ENV GRAPHQL_API_URL=https://your-production-api/graphql
    RUN npm run codegen
    
    RUN npm run build
    
    CMD ["npm", "start"]
    

方案三:共享API的Schema源码(适用于API和前端同团队)

如果GraphQL API也是你们开发的,可以直接将API的Schema源码(比如.graphql文件或定义Schema的TypeScript文件)共享给前端项目:

  • 将API的Schema作为私有npm包发布,前端项目安装该包
  • 或者直接将Schema文件复制到前端项目目录
  • 然后修改code-gen配置指向这个共享的Schema文件,后续构建流程和方案一一致

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 06:06:31