Envelop 开源项目教程
1. 项目介绍
Envelop 是一个轻量级的 JavaScript/TypeScript 库,旨在简化 GraphQL 执行层的开发、共享、协作和扩展。它提供了一个插件系统,允许开发者通过插件来扩展 GraphQL 的功能,填补了 GraphQL 实现中的空白。Envelop 的核心理念是轻量级、插件化、低级 API、与 GraphQL 引擎无关、与 HTTP 层无关、与模式工具无关,并且具有出色的 TypeScript 支持。
2. 项目快速启动
安装依赖
首先,你需要在你的项目中安装 graphql 和 @envelop/core 依赖:
yarn add graphql @envelop/core
创建 Envelop 实例
接下来,创建一个基于你的 GraphQL 模式的 Envelop 实例:
import * as GraphQLJS from 'graphql';
import { envelop, useEngine, useSchema } from '@envelop/core';
const mySchema = buildSchema(/* 你的 GraphQL 模式 */); // GraphQLSchema
const getEnveloped = envelop({
plugins: [
useEngine(GraphQLJS),
useSchema(mySchema)
]
});
运行 GraphQL 查询
使用 Envelop 实例来处理客户端的 GraphQL 查询。以下是一个伪代码示例:
const httpServer = createServer();
httpServer.on('request', async (req, res) => {
// 获取 Envelop 提供的替代方法
const { parse, validate, contextFactory, execute, schema } = getEnveloped({ req });
// 解析初始请求并验证
const { query, variables } = JSON.parse(req.payload);
const document = parse(query);
const validationErrors = validate(schema, document);
if (validationErrors.length > 0) {
return res.end(JSON.stringify({ errors: validationErrors }));
}
// 构建上下文并执行
const context = await contextFactory(req);
const result = await execute({
document,
schema,
variableValues: variables,
contextValue: context
});
// 发送响应
res.end(JSON.stringify(result));
});
httpServer.listen(3000);
3. 应用案例和最佳实践
收集指标和日志记录
Envelop 提供了内置插件,可以轻松地收集指标和记录所有传入的请求。以下是一个简单的示例:
const getEnveloped = envelop({
plugins: [
useEngine(GraphQLJS),
useSchema(schema),
useLogger(),
useTiming()
]
});
自定义插件
Envelop 允许你编写自定义插件来扩展功能。以下是一个简单的示例,展示如何打印执行参数:
const myPlugin = {
onExecute({ args }) {
console.log('Execution started:', args);
return {
onExecuteDone({ result }) {
console.log('Execution done:', result);
}
};
}
};
const getEnveloped = envelop({
plugins: [
// 其他插件
myPlugin
]
});
4. 典型生态项目
@envelop/core
@envelop/core 是 Envelop 的核心库,提供了基本的插件系统和执行流程管理。
@envelop/plugins
Envelop 生态系统中有许多插件,如 @envelop/logger、@envelop/timing 等,这些插件可以帮助你轻松地扩展 GraphQL 的功能。
@envelop/graphql-tools
@envelop/graphql-tools 提供了与 GraphQL 工具集成的插件,帮助你更好地管理和操作 GraphQL 模式。
通过这些模块的学习和使用,你可以更好地理解和应用 Envelop 项目,提升你的 GraphQL 开发效率。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考



