Javascript 将输出graphql模式变量写入.js文件
因此,我为特定格式的json文件构建了这个解析器,将它们转换为GraphQL模式Javascript 将输出graphql模式变量写入.js文件,javascript,graphql,graphql-js,Javascript,Graphql,Graphql Js,因此,我为特定格式的json文件构建了这个解析器,将它们转换为GraphQL模式 import jsonToSchema from '../../helpers/json-to-schema.js'; import patientJson from './patient.json'; import valueSetJson from './value-set.json'; import relatedPersonJson from './related-person.json'; import
import jsonToSchema from '../../helpers/json-to-schema.js';
import patientJson from './patient.json';
import valueSetJson from './value-set.json';
import relatedPersonJson from './related-person.json';
import practitionerJson from './practitioner.json';
import encounterJson from './encounter.json';
const patientInput = jsonToSchema(patientJson, true);
const patient = jsonToSchema(patientJson);
const valueSetInput = jsonToSchema(valueSetJson, true);
const valueSet = jsonToSchema(valueSetJson);
const relatedPersonInput = jsonToSchema(relatedPersonJson, true);
const relatedPerson = jsonToSchema(relatedPersonJson);
const practitionerInput = jsonToSchema(practitionerJson, true);
const practitioner = jsonToSchema(practitionerJson);
const encounterInput = jsonToSchema(encounterJson, true);
const encounter = jsonToSchema(encounterJson);
export {
patient,
patientInput,
valueSet,
valueSetInput,
relatedPerson,
relatedPersonInput,
practitionerInput,
practitioner,
encounterInput,
encounter
};
我有这样的schema.js
文件:
import { GraphQLObjectType, GraphQLSchema } from 'graphql';
import queries from './queries';
import mutations from './mutations';
export default new GraphQLSchema({
query: new GraphQLObjectType({ name: 'Query', fields: queries }),
mutation: new GraphQLObjectType({ name: 'Mutation', fields: mutations })
});
这个过程-jsonToSchema
function-有很多递归函数,随着项目的扩大,它可能会非常消耗资源
因此,我想知道是否有可能从这样一个过程中获取模式的结果模式,从而将模式的一个大对象作为字符串保存到
.js
文件中,因此,我使用npm包找到了解决这个问题的方法
第一个graphql服务器必须构建在一个与解析器分离的模式中
然后,我创建了一个gulp任务来保存模式-现在它被保存到.graphql
文件而不是.js
-如下所示:
//the dev-server tasks starts the server in development mode
gulp.task('build-schema', ['dev-server'], function getSchema() {
fetchSchema(config.APP_URL + ':' + config.APP_PORT + '/' + config.GQL_URL_DIR, { readable: true })
.then(function(schema) {
fs.writeFile(path.join(__dirname, 'src/data/schema.graphql'), schema, function(err) {
if (err) {
return console.log(err);
}
console.log('Schema saved to: src/data/schema.graphql');
console.log('Closing server');
process.exit();
});
})
.catch(err => {
if (err.code === 'ECONNREFUSED') {
console.log('Server not loaded, retrying in one second....');
setTimeout(getSchema, 1000);
}
});
});
我的schema.js
将如下所示:
import { GraphQLObjectType, GraphQLSchema } from 'graphql';
import schema from './schema.graphql';
import queries from './queries';
import mutations from './mutations';
import resolvers from '../data/resolvers.js';
import { addResolveFunctionsToSchema, makeExecutableSchema } from 'graphql-tools';
let gqlSchema;
if (process.env.NODE_ENV === 'production') {
gqlSchema = makeExecutableSchema({ typeDefs: schema, resolvers });
} else {
gqlSchema = new GraphQLSchema({
query: new GraphQLObjectType({ name: 'Query', fields: queries }),
mutation: new GraphQLObjectType({ name: 'Mutation', fields: mutations })
});
addResolveFunctionsToSchema(gqlSchema, resolvers);
}
export default gqlSchema;
所以,我已经找到了使用npm包解决这个问题的方法 第一个graphql服务器必须构建在一个与解析器分离的模式中 然后,我创建了一个gulp任务来保存模式-现在它被保存到
.graphql
文件而不是.js
-如下所示:
//the dev-server tasks starts the server in development mode
gulp.task('build-schema', ['dev-server'], function getSchema() {
fetchSchema(config.APP_URL + ':' + config.APP_PORT + '/' + config.GQL_URL_DIR, { readable: true })
.then(function(schema) {
fs.writeFile(path.join(__dirname, 'src/data/schema.graphql'), schema, function(err) {
if (err) {
return console.log(err);
}
console.log('Schema saved to: src/data/schema.graphql');
console.log('Closing server');
process.exit();
});
})
.catch(err => {
if (err.code === 'ECONNREFUSED') {
console.log('Server not loaded, retrying in one second....');
setTimeout(getSchema, 1000);
}
});
});
我的schema.js
将如下所示:
import { GraphQLObjectType, GraphQLSchema } from 'graphql';
import schema from './schema.graphql';
import queries from './queries';
import mutations from './mutations';
import resolvers from '../data/resolvers.js';
import { addResolveFunctionsToSchema, makeExecutableSchema } from 'graphql-tools';
let gqlSchema;
if (process.env.NODE_ENV === 'production') {
gqlSchema = makeExecutableSchema({ typeDefs: schema, resolvers });
} else {
gqlSchema = new GraphQLSchema({
query: new GraphQLObjectType({ name: 'Query', fields: queries }),
mutation: new GraphQLObjectType({ name: 'Mutation', fields: mutations })
});
addResolveFunctionsToSchema(gqlSchema, resolvers);
}
export default gqlSchema;