6

リレースターターキットで遊んでいます。また、 sangriaを使用してグラフql サーバーを作成しました。今、私は2つを一緒に配線しようとしています。

Relay-starter-kit では、スキーマを変更するたびに、スクリプトを実行して schema.json ファイルを再生成する必要があります。しかし、graphql はスキーマのイントロスペクションをサポートしているので、起動時にサーバーからスキーマをイントロスペクトするようにリレー アプリを構成する方法があるかどうか疑問に思っています。

これが可能かどうか、またはこれを行う方法を知っている人はいますか?

4

3 に答える 3

5

次のように、babelRelayPlugin.js (クライアントの graphql クエリを検証するときに webpack によって実行される) を定義します。

var babelRelayPlugin   = require('babel-relay-plugin');
var introspectionQuery = require('graphql/utilities').introspectionQuery;
var request            = require('sync-request');

var url = 'http://localhost:3000/graphql';

var response = request('POST', url, {
   qs: {
      query: introspectionQuery
   }
});

var schema = JSON.parse(response.body.toString('utf-8'));

module.exports = babelRelayPlugin(schema.data, {
   abortOnError: true,
});

もちろん、url 変数は、開発に使用するサーバーの URL に変更してください。webpack では、ローダーの定義に以下を含めます。

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

上記のbabelRelayPlugin.jsファイルの場所をポイントします。

于 2015-10-12T08:49:18.570 に答える
0

イントロスペクション プロダクト (schema.json) は、Babel Relay プラグインによってRelay.QL式の検証とコンパイルに使用されます。幸いなことに、getBabelRelayPlugin メソッドは、イントロスペクション プロダクト、またはイントロスペクション プロダクトを返す関数のいずれかを受け入れます。

次に、アプリのビルド システム (例: Webpack) で次のようなことを行うことができるはずです。

// Pseudocode
var SCHEMA_PATH = 'path/to/schema.js';
var introspectionProduct = introspectSchema(SCHEMA_PATH);

watch(SCHEMA_PATH, () => introspectionProduct = introspectSchema(SCHEMA_PATH));

var babelRelayPlugin = getBabelRelayPlugin(() => introspectionProduct);
于 2015-09-10T17:31:31.297 に答える