知海

JavaScript:GraphQL Tools(工具集)

graphql-github-io-zh-Hans生态项目与库

JavaScript:GraphQL Tools(工具集)

项目简介

GraphQL Tools 是一组用于加速 GraphQL 工具链开发的高效工具集,它提供了一套统一的工具函数与模块化 API,涵盖了 Schema 与文档的加载、Schema 合并、Schema 拼接(Stitching)等核心场景。该项目由 The Guild 团队维护,是 GraphQL 生态中被广泛使用的基础设施之一。

核心特性

  • Schema Loading(Schema 加载):支持从代码、SDL 文本、GraphQL Endpoint、JSON 文件等多种来源加载 GraphQL Schema,统一了不同加载方式的 API。
  • Schema Merging(Schema 合并):支持将多个子 Schema 合并为一个完整的 Schema,便于模块化拆分与团队协作。
  • Schema Stitching(Schema 拼接):支持通过配置将多个远程或本地 Schema 拼接为统一的 Gateway Schema,适合微服务架构下的数据聚合场景。
  • 文档加载:提供了从文件路径、Glob 模式、HTTP URL 等途径加载 GraphQL 文档(Query、Mutation、Fragment)的能力。
  • Mocking(模拟数据):内置 Mock 支持,可快速基于 Schema 生成模拟数据,便于前端开发与测试。
  • 工具函数:包含大量辅助函数,如类型查找、字段遍历、Schema 打印与 AST 操作等。

安装

你可以通过 npm 或 yarn 安装 graphql-tools 包:

bash 复制代码
npm install graphql-tools graphql

或:

bash 复制代码
yarn add graphql-tools graphql

注意graphql 作为 peer dependency,需要单独安装。

快速上手

1. 从类型定义创建 Schema

js 复制代码
import { makeExecutableSchema } from 'graphql-tools';

const typeDefs = `
  type Query {
    hello: String
  }
`;

const resolvers = {
  Query: {
    hello: () => 'Hello world!',
  },
};

const schema = makeExecutableSchema({
  typeDefs,
  resolvers,
});

2. 加载远程 Schema 并合并

js 复制代码
import { loadSchema } from '@graphql-tools/load';
import { UrlLoader } from '@graphql-tools/url-loader';
import { mergeSchemas } from '@graphql-tools/schema';

const userSchema = await loadSchema('https://api.example.com/user', {
  loaders: [new UrlLoader()],
});

const orderSchema = await loadSchema('https://api.example.com/order', {
  loaders: [new UrlLoader()],
});

const gatewaySchema = await mergeSchemas({
  schemas: [userSchema, orderSchema],
});

子包模块

GraphQL Tools 采用模块化设计,主要功能拆分到以下子包中,方便按需引入:

子包名 说明
@graphql-tools/schema Schema 创建、合并与拼接
@graphql-tools/load 统一 Schema 与文档加载框架
@graphql-tools/url-loader 从 URL 加载 GraphQL Schema
@graphql-tools/code-file-loader 从代码文件中提取 Schema
@graphql-tools/graphql-file-loader .graphql 文件中加载 Schema
@graphql-tools/merge 类型定义与 Schema 合并逻辑
@graphql-tools/mock Schema Mocking 功能
@graphql-tools/stitch Schema Stitching 相关能力

关联项目与更多信息

总结

GraphQL Tools 是 GraphQL 服务端开发中不可或缺的工具集之一,尤其在需要聚合多个数据源、拆分大型 Schema、或快速搭建 GraphQL Gateway 的场景下表现突出。其模块化的子包设计也使得开发者可以按需引入,保持构建体积的可控性。无论是初创项目还是大型微服务架构,GraphQL Tools 都能提供灵活而强大的底层支持。

帮助我们改进文档

发现翻译问题或内容错误?请告诉我们。