如何在Apollo GraphQL项目部署流水线中提取Schema?
从Apollo GraphQL项目本地提取Schema(无需部署)
你可以通过以下两种方式在本地/CI流水线中直接从代码生成Schema,无需部署应用到Lambda:
方法1:使用Apollo CLI提取
- 全局或项目内安装Apollo CLI:
npm install -g apollo-cli # 或项目内安装:npm install apollo-cli --save-dev - 确保你的项目代码中导出了Schema对象(比如在
src/schema.ts或类似文件中),示例:import { makeExecutableSchema } from '@graphql-tools/schema'; import typeDefs from './typeDefs'; import resolvers from './resolvers'; export const schema = makeExecutableSchema({ typeDefs, resolvers }); - 运行提取命令,指定Schema导出文件的路径:
该命令会读取本地导出的Schema对象,生成SDL格式的apollo schema:extract --endpoint=./src/schema.ts --output schema.graphqlschema.graphql文件。
方法2:自定义Node脚本生成(更灵活)
如果不想依赖Apollo CLI,可自行编写简单脚本生成Schema:
- 创建
generate-schema.js文件:
若使用TypeScript,可直接用const { printSchema } = require('graphql'); // 根据项目结构调整导入路径 const { schema } = require('./src/schema'); // 生成SDL格式的Schema文本 const schemaSDL = printSchema(schema); // 写入本地文件 require('fs').writeFileSync('./schema.graphql', schemaSDL, 'utf8');ts-node运行:ts-node generate-schema.ts - 在CI流水线中执行该脚本即可生成Schema文件。
集成到部署流水线
以GitHub Actions为例,添加以下步骤到工作流文件:
jobs: update-schema-docs: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: Install dependencies run: npm install - name: Generate Schema run: node generate-schema.js # 或使用Apollo CLI命令 - name: Upload to S3 run: aws s3 cp schema.graphql s3://your-bucket-name/docs/schema.graphql env: AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }} AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
这样每次主分支有提交时,流水线会自动生成Schema并更新S3中的文档。
注意事项
- 确保Schema对象在代码中可导出,Apollo Server v4+中可通过
server.schema获取(若已创建ApolloServer实例)。 - 若使用代码优先的Schema定义方式(如
@nestjs/graphql或Prisma),需确保能正确获取最终的Schema对象。
内容的提问来源于stack exchange,提问作者Marcus Lagerstedt
相关产品推荐
相关产品推荐

