我开发了一个带有laravel(https://github.com/Folkloreatelier/laravel-graphql)的graphql服务器。现在我想使用Relay创建一个React应用程序。当我创建我的第一个组件时,我收到错误:
未捕获错误:不变违规:RelayQL:运行时意外调用。未设置Babel转换,或者无法识别此呼叫站点。确保将其逐字逐句用作Relay.QL
。
我仍然用Google搜索错误,我发现我需要安装Babel Relay插件。但要包含此插件,我必须指定一个架构。但是我仍然在服务器端指定了这个模式,为什么我还需要在客户端呢?有没有任何示例如何在服务器仍然实现时实现这一点(外部服务器,例如没有NodeJS服务器)。
感谢您的建议。
答案 0 :(得分:4)
babel-relay-plugin 需要服务器端数据的模式来传输将传递给客户端的Javscripts中的Relay.QL片段。但请注意,在GraphQL服务器上,您需要在Laravel GraphQL PHP类中定义模式,您需要将其转换为babel-relay-plugin
期望的JSON格式。
例如,我使用Rails和 graphql-ruby (https://github.com/nethsix/relay-on-rails)进行了类似的设置。
app/graph
目录中的 graphql-ruby 类在我的服务器端定义数据模式lib/tasks/graphql.rake
将架构转换为JSON文件,然后将其存入app/assets/javascripts/relay/data/schema.json
schema.json
文件中的babelRelayPlug.js
,无论身在何处(我的assets/javascripts/relay/utils/babelRelayPlugin.js
)对于Rails,我们可以通过调用graphql-ruby
方法轻松地将#to_json
模式转储到json。你可能在PHP中有类似的方法。
我比较了在nodejs服务器上设置Relay与使用插图的非nodejs服务器之间的区别,如果它有帮助(https://medium.com/@khor/relay-facebook-on-rails-8b4af2057152)