If you’re working with AWS AppSync or any modular GraphQL API, you’ve probably want to split your schema across multiple files. This is great for developer sanity—but AppSync prefers a single .graphql file.
Let’s automate that.
This post walks through a simple Node.js script that uses the @graphql-tools ecosystem to:
✅ Load and merge your GraphQL schemas
✅ Resolve conflicts
✅ Write the final result to a single .graphql file
✅ load schema into your AppSync deployment flow
🛠 Setup
Install the necessary dependencies:
npm install @graphql-tools/load-files @graphql-tools/merge graphql
📦 Your Project Structure
Assume your project is organized like this:
project-root/
├── appsync/
│ ├── mutations/
│ │ └── addCustomer.graphql
│ ├── queries/
│ │ └── getCustomer.graphql
│ └── schema_chatbot_quicksight_merged.graphql (output)
├── mergeSchemas.js
🧩 The Merge Script
Here’s the full script to merge your GraphQL schema files:
import { loadFilesSync } from "@graphql-tools/load-files";
import { mergeTypeDefs } from "@graphql-tools/merge";
import { print } from "graphql";
import fs from "fs";
import path from "path";
import { fileURLToPath } from "url";
try {
const __filename = fileURLToPath(import.meta.url);
const __dirname = path.dirname(__filename);
const mergedFileName = "schema_chatbot_quicksight_merged.graphql";
const outputPath = path.join(__dirname, "./appsync", mergedFileName);
const typesArray = loadFilesSync(path.join(__dirname, "./appsync/**/*.graphql"), {
extensions: [".graphql"],
ignore: [mergedFileName],
});
if (!typesArray || typesArray.length === 0) {
throw new Error("No GraphQL schema files found");
}
console.log(
"Loaded files:",
typesArray.map((t) => t?.loc?.source?.name || typeof t),
);
const mergedTypeDefs = mergeTypeDefs(typesArray, {
all: true,
throwOnConflict: true,
});
const sdl = print(mergedTypeDefs);
const outputDir = path.dirname(outputPath);
if (!fs.existsSync(outputDir)) {
fs.mkdirSync(outputDir, { recursive: true });
}
fs.writeFileSync(outputPath, sdl);
console.log(`✅ Merged schema written to appsync/${mergedFileName}`);
} catch (error) {
console.error("❌ Error merging GraphQL schemas:", error.message);
process.exit(1);
}
🚀 Using It in AWS CDK
Once your merged schema is generated, you can use it directly in your CDK stack with aws-cdk-lib/aws-appsync.
Here’s an example:
import * as cdk from "aws-cdk-lib";
import { Construct } from "constructs";
import * as appsync from "aws-cdk-lib/aws-appsync";
import * as path from "path";
export class AppsyncStack extends cdk.Stack {
constructor(scope: Construct, id: string, props?: cdk.StackProps) {
super(scope, id, props);
const api = new appsync.GraphqlApi(this, "graphql-api", {
name: "ChatbotQuickSightApi",
schema: appsync.SchemaFile.fromAsset(
path.join(__dirname, "../appsync/schema_chatbot_quicksight_merged.graphql")
),
authorizationConfig: {
defaultAuthorization: {
authorizationType: appsync.AuthorizationType.API_KEY,
},
},
xrayEnabled: true,
});
new cdk.CfnOutput(this, "GraphQLAPIURL", {
value: api.graphqlUrl,
});
}
}
🧠 Tip
You can run your mergeSchemas.js script as part of your CDK build pipeline. For example:
"scripts": {
"prepare-schema": "node mergeSchemas.js",
"build": "npm run prepare-schema && cdk synth"
}
🧼 Why This Matters
- Keep your schema modular for readability and reuse
- Deliver a single file AppSync expects without error-prone copy/paste
- Enable CI/CD integration with schema validation and bundling in one step
United States
NORTH AMERICA
Related News
Amazon Employees Are 'Tokenmaxxing' Due To Pressure To Use AI Tools
20h ago
UCP Variant Data: The #1 Reason Agent Checkouts Fail
6h ago

Décryptage technique : Comment builder un téléchargeur de vidéos Reddit performant (DASH, HLS & WebAssembly)
16h ago
How Braze’s CTO is rethinking engineering for the agentic area
10h ago
Encryption Protocols for Secure AI Systems: A Practical Guide
20h ago