当我的GraphQL模式在运行时由后排(在其自己的容器中)自动生成GraphQL模式时,如何作为脱机构建步骤运行中继编译器?

问题描述 投票:0回答:1

我正在构建一个网络应用,其文件结构如下所示:

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是快速应用程序。

我的前端代码包含在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还是很满意的,所以我希望对这些技术更熟悉的人可以给我一些智慧。我还没有找到很多资源来专门使用带后石墨的Relay。

代替某些特定的最佳实践,也许更熟悉现代Web开发的人可以帮助我对这些选项进行排序:

  • 我是否更新前端,使其完全能够旋转postgres服务器并运行postgraphile(仅作为dev依赖项),然后添加一个脱机脚本来生成schema.graphql文件供其自己使用?这似乎是一个大混乱。

  • 我是否更新我的graphql容器,以便它总是写出一个模式文件,并根据需要手动将该文件复制并粘贴到我的前端中?

  • 我是否在任何容器外部添加了一个额外的过程(可能会在更改数据库模式时手动运行)(通过备用docker-compose文件),从而旋转了我的应用程序堆栈的一部分,转储退出graphql模式,然后退出?如果是这样,是否有某种方法可以指导Docker容器在主机上写出文件,或者将本地目录装载到该容器是实现此目的的最佳方法?

  • 是否有更好的结构化项目的方法,从而可以首先避免此问题?我是Docker的新手,我觉得也许我的大脑只是在Docker之前和之后的思维方式中分裂了。

docker graphql relay postgraphile
1个回答
1
投票

您可以使用graphql-cli's get-schema从启用了自省的端点下载模式文件。这样,您可以简单地从远程或本地PostGraphile端点获取模式。

尽管如此,同时运行本地版本的PostGraphile可以可靠地重新创建与生产模式相同的模式可能非常有益。

© www.soinside.com 2019 - 2024. All rights reserved.