簡體   English   中英

當我的 GraphQL 模式在運行時由 postgraphile(在其自己的容器中)自動生成時,如何將中繼編譯器作為離線構建步驟運行?

[英]How do I run relay-compiler as an offline build step, when my GraphQL schema is auto-generated by postgraphile (in its own container) at runtime?

我正在構建一個網絡應用程序,其文件結構如下所示:

db/
  Dockerfile
  init/
    00-init.sql
graphql/
  Dockerfile
app/
  Dockerfile
  package.json
  bin/
    www
  public/
    index.html
    index.js
  app.js
  frontend/
    .babelrc
    package.json
    webpack.config.js
    src/
      index.jsx
docker-compose.yml

該項目由三個容器組成: db運行 postgres 服務器, graphql運行 postgraphile(自動生成 GraphQL 模式並處理 GraphQL 請求), app是一個 express 應用程序。

我的前端代碼包含在app/frontend中的一個單獨包中。 通常,我會在該目錄中運行npm run build來調用 webpack,將app/frontend/src的內容構建為app/public/index.js的可再發行形式。 這樣,構建前端是一個離線過程,而應用程序本身只是為前端提供服務。

這是我的困境:我正在嘗試向我的前端添加中繼支持。 這需要前端構建中的一個額外步驟,即運行中繼編譯器。 但是中繼編譯器需要一個 GraphQL 模式。 由於我使用的是 postgraphile,因此在離線構建期間我實際上沒有架構。 Postgraphile 可以吐出一個模式文件(使用--export-schema-graphql ),但現在我只在容器中運行 postgraphile - 我的 db 容器必須啟動並初始化數據庫,此時 postgraphile 可以連接並生成一個模式,此時我有一個 graphql.schema 文件......位於 graphql 容器內。 但這一切都發生在我啟動應用程序之后 - 在此之前我需要一個架構文件,作為離線構建的一部分。

我對 Docker、GraphQL、postgraphile,尤其是 Relay 仍然很陌生——所以我希望更熟悉這些技術的人可以給我一些智慧。 我還沒有找到很多專門解決使用帶有 postgraphile 的 Relay 的資源。

代替特定的最佳實踐,也許更熟悉現代 Web 開發的人可以幫助我整理這些選項:

  • 我是否更新我的前端,使其完全能夠啟動 postgres 服務器並運行 postgraphile(僅作為開發依賴項),然后添加一個離線腳本來生成一個供自己使用的 schema.graphql 文件? 這似乎是一團糟。

  • 我是否更新我的 graphql 容器,以便它始終寫出模式文件,然后根據需要手動將該文件復制並粘貼到我的前端?

  • 我是否在任何容器外部(可能通過替代的 docker-compose 文件)添加一個額外的進程(我會在我的數據庫模式更改時手動運行),以啟動我的應用程序堆棧的子集,轉儲出一個 graphql 模式,然后退出? 如果是這樣,是否有某種方法可以指導 Docker 容器在主機上寫出文件,或者將本地目錄安裝到容器是實現這一目標的最佳方法?

  • 有沒有更好的方法來構建我的項目,首先避免這個問題? 我是 Docker 的新手,我覺得我的大腦可能只是在 Docker 之前和 Docker 之后的心態之間分裂了。

您可以使用graphql-cli 的get-schema從啟用了自省的端點下載架構文件。 通過這種方式,您可以簡單地從遠程或本地 PostGraphile 端點獲取模式。

盡管如此,運行本地版本的 PostGraphile 會非常有益,它可以可靠地重新創建與生產模式相同的模式。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM