Facebook 中继应用程序:如何在服务器上反思架构?

Facebook 中继应用程序:如何在服务器上反思架构?,facebook,reactjs,relayjs,graphql,sangria,Facebook,Reactjs,Relayjs,Graphql,Sangria,我在玩接力起动器套件。我还用于创建graphql服务器。现在我正试着把两者联系起来 在中继初学者工具包中,每次更改模式时,都需要运行脚本来重新生成schema.json文件。但是由于graphql支持模式内省,我想知道是否有一种方法可以配置我的中继应用程序,在服务器启动时从服务器内省模式 有人知道这是否可行,或者知道如何做到这一点吗?看来我们需要这样的东西(来自): 从'graphql/utilities'导入{buildASTSchema,introspectionQuery}; var bo

我在玩接力起动器套件。我还用于创建graphql服务器。现在我正试着把两者联系起来

在中继初学者工具包中,每次更改模式时,都需要运行脚本来重新生成schema.json文件。但是由于graphql支持模式内省,我想知道是否有一种方法可以配置我的中继应用程序,在服务器启动时从服务器内省模式


有人知道这是否可行,或者知道如何做到这一点吗?

看来我们需要这样的东西(来自):

从'graphql/utilities'导入{buildASTSchema,introspectionQuery};
var body=fs.readFileSync(infle,'utf8');
var ast=parseSchemaIntoAST(主体);
var astSchema=buildASTSchema(ast,‘根’、‘突变’);
graphql(astSchema,内省查询)(
功能(结果){
var out=JSON.stringify(结果,null,2);
fs.writeFileSync(输出文件,输出);
});
Babel Relay插件使用内省产品(schema.json)来验证和编译
Relay.QL
表达式。幸运的是,getBabelRelayPlugin方法接受内省产品或返回内省产品的函数

然后,在应用程序的构建系统(例如网页包)中应该可以执行类似的操作:

//伪代码
var SCHEMA_PATH='PATH/to/SCHEMA.js';
var-introspectionProduct=introspectSchema(SCHEMA\u路径);
观察(SCHEMA_路径,()=>introspectionProduct=introspectSchema(SCHEMA_路径));
var babelRelayPlugin=getBabelRelayPlugin(()=>内省产品);

定义babelRelayPlugin.js(在验证客户端graphql查询时由webpack运行),如下所示:

当然,将url变量更改为用于开发的任何服务器url。 在网页包中,在加载程序定义中包括以下内容:

query: {stage: 0, plugins: ['./babelRelayPlugin']}

并指向上面babelRelayPlugin.js文件的位置。

运行“npm start”时,它不是这样做的吗?使用“npm run update-schema”内省生成的模式文件,该文件不是内省,而是加载
schema.json
。我想要的是能够向我的服务器发出一个graphql内省查询,这样它就可以拉下那个JSON,而无需我继续运行
npm run update schema
或我的服务器的等效程序。我有一个GitHub问题,可以将其烘焙到初学者工具包中。如果有人在我到达之前有时间,给你!这是否支持命中外部服务器?
getBabelRelayPlugin()
只接受字符串或同步回调。如果Babel允许插件以这种方式运行,那么可以将其扩展为接受异步回调@乔萨沃纳可能知道更多。
query: {stage: 0, plugins: ['./babelRelayPlugin']}