graphql-tools
graphql-tools copied to clipboard
Circular dependency in @graphql-tools/load-files
The Bug
Using load-files causes circular dependencies warnings to be triggered.
To Reproduce
Consider having a project with the following structure:
project/
├── app.js
├── resolvers/
│ ├── resolver1.js
│ ├── resolver2.js
│ └── index.js
.
.
.
app.js:
var express = require('express');
var { graphqlHTTP } = require('express-graphql');
var { buildSchema, GraphQLScalarType, Kind } = require('graphql');
var resolvers = require('./resolvers')
var schema = buildSchema(`
.
.
.
`);
var app = express();
app.use('/graphql', graphqlHTTP({
schema: schema,
rootValue: resolvers,
graphiql: true,
}));
app.listen(4000);
console.log('Running a GraphQL API server at localhost:4000/graphql');
resolvers/index.js:
const path = require('path')
const { mergeResolvers } = require('@graphql-tools/merge')
const { loadFilesSync } = require('@graphql-tools/load-files')
const resolversArray = loadFilesSync([path.join(__dirname, './*.js')])
module.exports = mergeResolvers(resolversArray)
Expected behavior

Current Output

Environment:
- OS: Kubuntu
@graphql-tools/load-files:- NodeJS: 14.15.3
Additional context
I got rid of the circular dependencies using the package merge-graphql-schemas, as follows:
resolvers/index.js:
const path = require('path');
const { mergeResolvers, fileLoader } = require('merge-graphql-schemas');
const resolversArray = fileLoader(path.join(__dirname, './*.js'));
const resolvers = mergeResolvers(resolversArray);
module.exports = resolvers;
loadFiles is using nodejs module system. If it cannot handle circular dependency, we have nothing to do with that as far as I know. If someone has a solution, PRs are welcome
Closing this for now since the main cause is the module system of the environment itself.