[英]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.