前言
GraphQL 是一种用于 API 的查询语言和运行时环境,可以有效地帮助前端项目开发过程中的数据获取及管理。而 @graphql-tools/load-files 这个 npm 包则可以方便地将我们的 GraphQL schema 以及 resolvers 加载到我们的项目中,完成自动化的绑定和关联,大大提高代码的可维护性和可扩展性。
安装
我们可以使用 npm 命令来安装 @graphql-tools/load-files 包,同时还需要安装 graphql,如下所示:
npm install @graphql-tools/load-files graphql
用法
示例项目结构
在我们开始使用 @graphql-tools/load-files 之前,先来看一下有哪些文件需要准备。本文中我们将以一个基于 Node.js 的 GraphQL 服务器项目为例进行演示,项目结构如下:
- schema/ - typeDefs.graphql - resolvers/ - index.js - user.js - server.js
schema/typeDefs.graphql 文件中定义了我们项目中使用的 GraphQL schema,包括 Query 以及 Mutation。
resolvers/index.js 文件会作为我们的 resolver 的入口文件,并且通过 @graphql-tools/load-files 自动加载目录下所有的 resolver。
const path = require('path') const { loadFilesSync } = require('@graphql-tools/load-files') const { mergeResolvers } = require('@graphql-tools/merge') const resolversArray = loadFilesSync(path.join(__dirname, './')) module.exports = mergeResolvers(resolversArray)
而在 resolvers 目录下,我们会应用不同的文件进行拆分不同的 resolver。
加载 TypeDefs
我们可以使用 loadTypedefsSync
方法快速加载 typeDefs 文件,如下所示:
const path = require('path') const { loadTypedefsSync } = require('@graphql-tools/load-files') const { mergeTypeDefs } = require('@graphql-tools/merge') const typeDefsArray = loadTypedefsSync(path.join(__dirname, './**/*.graphql')) module.exports = mergeTypeDefs(typeDefsArray)
在这个例子中,我们加载了 schema 目录下所有的 .graphql 文件,同时利用 mergeTypeDefs
方法将它们合并成一个完整的 schema。
自动加载 Resolvers
我们可以通过 loadFilesSync
方法来自动加载 resolvers 目录下的所有 resolver 文件,如下所示:
const path = require('path') const { loadFilesSync } = require('@graphql-tools/load-files') const { mergeResolvers } = require('@graphql-tools/merge') const resolversArray = loadFilesSync(path.join(__dirname, './')) module.exports = mergeResolvers(resolversArray)
在这个例子中,我们的入口文件通过 loadFilesSync
方法将 resolver 目录下的所有 .js 文件加载到 resolversArray 数组中,而后用 mergeResolvers
方法将它们合并成一个完整的 resolver 对象。
当我们开始使用 GraphQL schema 时,我们只需要在相应的位置导入合并后的 typeDefs 和 resolvers 即可:
-- -------------------- ---- ------- ----- - ------------ - - ------------------------ ----- -------- - ---------------------------- ----- --------- - ----------------------------- ----- ------ - --- -------------- --------- ---------- -- ----------------------- --- -- -- - ------------------- --------- -- -------- --
小结
通过学习 @graphql-tools/load-files 的使用教程,我们可以发现自动加载 typeDefs 和 resolvers 文件对于我们的 GraphQL 服务器项目来说非常实用。它使得我们的代码结构更加清晰可维护,同时降低了开发成本,迅速提高了我们的开发效率。希望本篇文章能给大家带来一些指导意义,帮助大家更好地使用该 npm 包。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/5eedc8a4b5cbfe1ea061230f