仅在客户端中继 JS

Relay JS only on client side

我用 laravel (https://github.com/Folkloreatelier/laravel-graphql) 开发了一个 graphql 服务器。现在我想使用 Relay 创建一个 React 应用程序。当我创建我的第一个组件时,我收到错误: 未捕获的错误:不变违规:RelayQL:运行时意外调用。未设置 Babel 转换,或者无法识别此调用站点。确保它被逐字用作 Relay.QL.

我仍然在谷歌上搜索错误,我认识到我需要安装 Babel 中继插件。但是要包含这个插件,我必须指定一个模式。但是我仍然在服务器端指定了这个模式,为什么我在客户端也需要这个?当服务器仍在实施时(外部服务器,例如没有 NodeJS 服务器),是否有任何示例如何实施此操作。

感谢您的建议。

babel-relay-plugin 需要服务器端数据的模式,以便对 Javscripts 中的 Relay.QL 片段进行转译,这些片段将被传送到客户端。但是,请注意,在您的 GraphQL 服务器上,您在 Laravel GraphQL PHP 类 中定义了架构,您需要将其转换为 JSON 格式 babel-relay-plugin期待。

例如,我用 Rails 和 graphql-ruby (https://github.com/nethsix/relay-on-rails).

进行了类似的设置
  • 使用 graphql-ruby 类 在 app/graph 目录
  • 中定义我服务器端的数据模式
  • 使用脚本 lib/tasks/graphql.rake 将模式转换为 JSON 文件,然后我将其存储到 app/assets/javascripts/relay/data/schema.json
  • 指向 babelRelayPlug.js 文件中的 schema.json(我的在 assets/javascripts/relay/utils/babelRelayPlugin.js

对于 Rails,我们可以通过调用 #to_json 方法轻松地将 graphql-ruby 模式转储到 json。你可能在PHP.

中有类似的方法

我比较了在 nodejs 服务器上设置 Relay 与在非 nodejs 服务器上设置 Relay 之间的区别,如果有帮助的话,请在此处使用插图 (https://medium.com/@khor/relay-facebook-on-rails-8b4af2057152)