当前位置: 首页 > news >正文

WHAT - graphql 系列(二)- graphql-codegen

目录

  • 前言
  • 1. 安装 `graphql-codegen`
  • 2. 创建 `codegen.yml` 配置文件
  • 3. 添加 GraphQL 查询和突变文件
  • 4. 运行 Codegen
  • 5. 使用生成的代码
  • 6. 配置其他选项
  • 总结

前言

graphql-codegen 是一个工具,用于生成 TypeScript 类型、查询和其他 GraphQL 相关代码。它可以大大简化 GraphQL 开发过程,提高开发效率和代码一致性。

以下是如何使用 graphql-codegen 来为你的项目生成 TypeScript 类型和其他代码的一些基本步骤和示例配置。

1. 安装 graphql-codegen

首先,你需要安装 graphql-codegen 及其相关依赖。你可以使用以下命令来安装:

npm install @graphql-codegen/cli @graphql-codegen/typescript @graphql-codegen/typescript-operations @graphql-codegen/typescript-react-apollo graphql

或者使用 yarn

yarn add @graphql-codegen/cli @graphql-codegen/typescript @graphql-codegen/typescript-operations @graphql-codegen/typescript-react-apollo graphql

2. 创建 codegen.yml 配置文件

在项目根目录下创建一个 codegen.yml 文件,配置你的生成选项。以下是一个示例配置:

schema:- 'https://your-graphql-endpoint.com/graphql' # GraphQL API schema endpoint
documents: './src/**/*.graphql' # Path to your GraphQL queries and mutations
generates:./src/generated/graphql.ts: # Path to generate TypeScript typesplugins:- 'typescript' # Generates TypeScript types- 'typescript-operations' # Generates TypeScript types for operations (queries, mutations)- 'typescript-react-apollo' # Generates React Apollo hooks

3. 添加 GraphQL 查询和突变文件

确保你的项目中有 .graphql 文件,这些文件包含了你的 GraphQL 查询和突变。例如,你可以在 src/queries 目录下创建 getUser.graphql 文件:

# src/queries/getUser.graphql
query GetUser($id: ID!) {user(id: $id) {idnameemail}
}

4. 运行 Codegen

package.json 文件中添加一个 codegen 脚本来运行 graphql-codegen

"scripts": {"codegen": "graphql-codegen"
}

然后,运行以下命令来生成代码:

npm run codegen

或者使用 yarn

yarn codegen

5. 使用生成的代码

生成的 TypeScript 类型和 React Apollo hooks 会在 src/generated/graphql.ts 文件中。你可以在你的 React 组件中使用这些生成的 hooks。例如:

import React from 'react';
import { useGetUserQuery } from './generated/graphql';const UserProfile: React.FC<{ userId: string }> = ({ userId }) => {const { data, loading, error } = useGetUserQuery({variables: { id: userId }});if (loading) return <p>Loading...</p>;if (error) return <p>Error: {error.message}</p>;return (<div><h1>{data?.user.name}</h1><p>{data?.user.email}</p></div>);
};export default UserProfile;

6. 配置其他选项

你可以根据需要配置 graphql-codegen 的其他选项,如自定义生成代码的格式、启用缓存等。详细的配置选项可以参考 GraphQL Code Generator 文档.

总结

graphql-codegen 可以极大地提高 GraphQL 项目的开发效率,通过自动生成类型和 hooks,帮助你减少重复代码和类型错误。你可以根据项目的实际需求和 GraphQL 服务的复杂性调整配置和生成的内容。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 【Linux篇】Linux命令基础
  • 大数据-92 Spark 集群 SparkRDD 原理 Standalone详解 ShuffleV1V2详解 RDD编程优化
  • 【Spring技术】
  • 校友会系统小程序的设计
  • 从web.xml动态读取sunspringmvc.xml文件
  • 重复的DNA序列(LeetCdoe)
  • 【Android】adb devices 出现devices offline的问题
  • HttpMessageNotReadableException
  • 开源微服务开发框架Pig
  • 「阅读」数据密集型系统设计 第六章 分区
  • 基于STM32开发的智能水箱液位控制系统
  • Tina-SDK开发
  • NVIDIA超分辨率开启详细教程
  • 【Redis】哈希类型详解及缓存方式对比:从命令操作到实际应用场景
  • 欧拉函数.
  • 《Java编程思想》读书笔记-对象导论
  • 【140天】尚学堂高淇Java300集视频精华笔记(86-87)
  • 【comparator, comparable】小总结
  • Apache的基本使用
  • co.js - 让异步代码同步化
  • ES6简单总结(搭配简单的讲解和小案例)
  • Java知识点总结(JavaIO-打印流)
  • JS 面试题总结
  • mysql 5.6 原生Online DDL解析
  • Puppeteer:浏览器控制器
  • Sass Day-01
  • Vue2.x学习三:事件处理生命周期钩子
  • vue从创建到完整的饿了么(18)购物车详细信息的展示与删除
  • 关于springcloud Gateway中的限流
  • 什么是Javascript函数节流?
  • 我感觉这是史上最牛的防sql注入方法类
  • 物联网链路协议
  • 项目管理碎碎念系列之一:干系人管理
  • 小程序上传图片到七牛云(支持多张上传,预览,删除)
  • 小试R空间处理新库sf
  • 走向全栈之MongoDB的使用
  • Hibernate主键生成策略及选择
  • kubernetes资源对象--ingress
  • 国内开源镜像站点
  • 哈罗单车融资几十亿元,蚂蚁金服与春华资本加持 ...
  • 你学不懂C语言,是因为不懂编写C程序的7个步骤 ...
  • ​经​纬​恒​润​二​面​​三​七​互​娱​一​面​​元​象​二​面​
  • ​软考-高级-系统架构设计师教程(清华第2版)【第20章 系统架构设计师论文写作要点(P717~728)-思维导图】​
  • ​学习一下,什么是预包装食品?​
  • ######## golang各章节终篇索引 ########
  • #if #elif #endif
  • (1)svelte 教程:hello world
  • (1)常见O(n^2)排序算法解析
  • (173)FPGA约束:单周期时序分析或默认时序分析
  • (2024,LoRA,全量微调,低秩,强正则化,缓解遗忘,多样性)LoRA 学习更少,遗忘更少
  • (4)logging(日志模块)
  • (C语言)深入理解指针2之野指针与传值与传址与assert断言
  • (delphi11最新学习资料) Object Pascal 学习笔记---第14章泛型第2节(泛型类的类构造函数)
  • (Matlab)使用竞争神经网络实现数据聚类
  • (pycharm)安装python库函数Matplotlib步骤