Schema Stitching Handbook 使用教程
1. 项目的目录结构及介绍
schema-stitching-handbook/
├── LICENSE
├── README.md
├── package.json
├── src/
│ ├── index.js
│ ├── config/
│ │ ├── default.json
│ │ ├── development.json
│ │ └── production.json
│ ├── services/
│ │ ├── localService.js
│ │ └── remoteService.js
│ └── utils/
│ └── schemaUtils.js
└── yarn.lock
- LICENSE: 项目许可证文件。
- README.md: 项目说明文档。
- package.json: 项目依赖和脚本配置文件。
- src/: 源代码目录。
- index.js: 项目入口文件。
- config/: 配置文件目录。
- default.json: 默认配置文件。
- development.json: 开发环境配置文件。
- production.json: 生产环境配置文件。
- services/: 服务文件目录。
- localService.js: 本地服务文件。
- remoteService.js: 远程服务文件。
- utils/: 工具文件目录。
- schemaUtils.js: 处理Schema的工具文件。
- yarn.lock: 依赖锁定文件。
2. 项目的启动文件介绍
项目的启动文件是 src/index.js
。这个文件负责初始化项目,加载配置,启动服务,并进行Schema的合并和处理。以下是 index.js
的主要内容:
const { ApolloServer } = require('apollo-server');
const { mergeSchemas } = require('@graphql-tools/merge');
const { loadSchema } = require('@graphql-tools/load');
const { JsonFileLoader } = require('@graphql-tools/json-file-loader');
const config = require('config');
const localSchema = require('./services/localService');
const remoteSchema = require('./services/remoteService');
async function startServer() {
const schemas = await Promise.all([
loadSchema(localSchema, { loaders: [new JsonFileLoader()] }),
loadSchema(remoteSchema, { loaders: [new JsonFileLoader()] })
]);
const mergedSchema = mergeSchemas({ schemas });
const server = new ApolloServer({ schema: mergedSchema });
const { url } = await server.listen({ port: config.get('port') });
console.log(`Server ready at ${url}`);
}
startServer();
3. 项目的配置文件介绍
项目的配置文件位于 src/config/
目录下,包括 default.json
, development.json
, 和 production.json
。这些文件使用 config
包进行管理,可以根据环境变量加载不同的配置。
default.json
{
"port": 4000,
"env": "development"
}
development.json
{
"port": 4001,
"env": "development"
}
production.json
{
"port": 80,
"env": "production"
}
这些配置文件定义了项目运行时的端口和环境变量,可以根据不同的环境进行调整。