我的问题与Javascript circular dependency in GraphQL code类似,但问题不在于结构和数据库级别,而在于javascript(ES6)。
我的架构定义越来越大,但我没有看到我可以将文件分割成碎片。基于不同的对象类型进行剪切似乎是合乎逻辑的,但这会带来循环依赖性,类似于这个非常简化的非工作示例:
{1, 6, 3, 2, 9}
对此有共同的方式或最佳做法吗?
答案 0 :(得分:4)
我遇到了同样的问题。我认为更清洁的解决方案是关于使用gruntjs concat。
grunt.initConfig({
concat: {
js: {
src: ['lib/before.js', 'lib/*', 'lib/after.js'],
dest: 'schema.js',
}
}
});
使用此配置,您可以将模式拆分为多个文件,从而创建最终的schema.js。
before.js可能就是这样:
import {
GraphQLObjectType,
GraphQLInt,
GraphQLString,
GraphQLSchema,
GraphQLList,
GraphQLNonNull
} from 'graphql';
import db from '../models/index.js';
import Auth from '../classes/auth';
after.js可能是这样的:
const Schema = new GraphQLSchema({
query: Query,
mutation: Mutation
})
export default Schema;
其他文件将包含以下对象:
const Funcionario = new GraphQLObjectType({
name: 'Funcionario',
description: 'This represent a Funcionario',
fields: () => {
return {
id: {
type: GraphQLInt,
resolve(funcionario, args) {
return funcionario.id;
}
},
CPF: {
type: GraphQLString,
resolve(funcionario, args) {
return funcionario.CPF;
}
},
nome: {
type: GraphQLString,
resolve(funcionario, args) {
return funcionario.nome;
}
},
sobrenome: {
type: GraphQLString,
resolve(funcionario, args) {
return funcionario.sobrenome;
}
},
sessions: {
type: new GraphQLList(Session),
resolve(funcionario, args) {
return funcionario.getSessions();
}
}
}
}
})
答案 1 :(得分:0)
请参见https://github.com/francoisa/todo/tree/master/server/graphql/types
todoType.js有一个对viewerType的引用,该引用是在viewerType.js中定义的。
viewerType.js从todoType导入