Javascript 将输出graphql模式变量写入.js文件

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

因此,我为特定格式的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 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;