0

バックエンド モードをNODE_ENV: developmentall に設定すると問題なく動作しますが、プロダクション モードでは graphql-codegen がエラーで失敗します。

ローカル Web サーバー エラー:

GraphQL イントロスペクションは Apollo サーバーでは許可されていませんが、クエリに _schema または _type が含まれていました。イントロスペクションを有効にするには、本番環境で introspection: true を ApolloServer に渡します。

本番 Web サーバー エラー:

https://example.com/graphqlからスキーマを読み込めませんでした。理由: 最初の証明書を検証できません。GraphQL コード ジェネレーターは以下をサポートしています。

  • ES モジュールと CommonJS エクスポート (デフォルトまたは名前付きエクスポート「スキーマ」としてエクスポート)
  • イントロスペクション JSON ファイル
  • GraphQL エンドポイントの URL
  • タイプ定義 (グロブ式) を持つ複数のファイル
  • 設定ファイルの文字列

フロントエンド codegen.yml:

schema: ${REACT_APP_GRAPHQL_URL}
documents:
 - './src/GraphQL/queries/query.ts'    
 - './src/GraphQL/mutations/mutation.ts'
overwrite: true
generates:
  ./src/generated/graphql.tsx:
    plugins:
      - typescript
      - typescript-operations
      - typescript-react-apollo
    config:
      skipTypename: false
      withHooks: true
      withHOC: false
      withComponent: false

フロントエンド devDependencies:

{
    "@graphql-codegen/cli": "^1.20.1",
    "@graphql-codegen/typescript": "^1.20.2",
    "@graphql-codegen/typescript-operations": "^1.17.14",
    "@graphql-codegen/typescript-react-apollo": "^2.2.1",
}

npm スクリプト:

{
    "generate": "graphql-codegen -r dotenv/config --watch --config codegen.yml",
    "prebuild": "graphql-codegen -r dotenv/config --config codegen.yml"
}

.gitignoreに追加された ./src/generated/ ディレクトリ

4

1 に答える 1

0

私の解決策は、イントロスペクション プラグインを追加し、codegen.yml ファイルを次のように分離することでした。

  • codegen-generate-schema-jsonおよび
  • codegen-generate-typescript
devDependencies: {"@graphql-codegen/introspection": "^1.18.1"}

codegen-generate-typescript.yml:

schema: graphql.schema.json
documents:
  - './src/GraphQL/queries/query.ts'
  - './src/GraphQL/mutations/mutation.ts'
overwrite: true
generates:
  ./src/generated/graphql.tsx:
    plugins:
      - typescript
      - typescript-operations
      - typescript-react-apollo
    config:
      skipTypename: false
      withHooks: true
      withHOC: false
      withComponent: false

codegen-generate-schema-json.yml:

schema: ${REACT_APP_GRAPHQL_URL}
overwrite: true
generates:
  ./graphql.schema.json:
    plugins:
      - introspection

したがって、./graphql.schema.jsonファイルをコミットして、URI の代わりにスキーマ ソースとして使用する必要があります。

多分あなたはより良い解決策を提案しますか?

于 2021-04-13T14:55:14.097 に答える