当我在服务器端更新架构时,中继/GraphQL 架构缓存未更新

Posted

技术标签:

【中文标题】当我在服务器端更新架构时,中继/GraphQL 架构缓存未更新【英文标题】:Relay/GraphQL Schema cache not updating when I update schema on server side 【发布时间】:2017-01-09 08:35:14 【问题描述】:

我有一个使用 Relay 和远程 GraphQL 服务器的 React 应用程序。当我启动 webpack 服务器时,我让它获取最新的模式并将其提供给 babel-relay-plugin。

效果很好....除非我进行架构更改。似乎 React 或 Relay 或 webpack 或其他东西正在缓存模式,因为当我运行应用程序时,我会在浏览器控制台中收到模式验证错误。但是,当我使用 GraphIQL 对 GraphQL 服务器手动运行查询时,查询成功。所以我在想,它必须在 react、relay、webpack 端有某种缓存?

我尝试过的事情:

    列表项 重启 webpack 服务器 删除 node_modulesnpm install 我什至尝试过重新启动我的计算机(这实际上似乎有效,但可能是巧合)

提前感谢您的帮助。

【问题讨论】:

我观察到了同样的问题,但尚未找到解决方案。 您是否尝试过更改 js 文件中的某些内容以强制重新编译,也许它没有检测到 js 中的更改,因此它不会重新编译。这有时会奏效。我怀疑 webpack 也可能正在缓存东西,并且与 HotModuleReplacment 一起可能会有更多问题。不过不确定。 是的,我试过了。 :-/ 似乎什么也没做。 是的,它对我也没有可靠的工作。 您找到可靠的解决方案了吗@postalservice14? 【参考方案1】:

事实证明,这当然是人为错误。在我的 babel-loader 查询中,我的 cacheDirectory 为 true。您可以在 babel-loader 自述文件中了解它(只需在页面上查找 'cacheDirectory')https://github.com/babel/babel-loader

一旦我将其更改为false,这是默认设置。问题消失了。希望对其他人有所帮助。

【讨论】:

【参考方案2】:

当我切换到 Webpack 2 时,这发生在我身上。

在我的情况下,解决方案是将babelRelayPlugin 移动为第一个在.babelrc 中执行的插件。

我不太确定为什么。

【讨论】:

我把它放在第一位。但是我仍然观察到同样的问题。

以上是关于当我在服务器端更新架构时,中继/GraphQL 架构缓存未更新的主要内容,如果未能解决你的问题,请参考以下文章

中继突变中没有字段“clientMutationId”

中继棱镜 graphql 更新存储

在中继分页graphql上滚动时合并以前的数据

使用反应导航和中继进行乐观更新

GraphQL 和中继过滤 UI

Babel 插件反应中继