前情提要

我部署了一套 Strapi 4 并且开启了 GraphQL (详见《借助 Bedrock SDK,全面释放内容生产力 - Jeff Tian的文章 - 知乎 》),可以通过 https://strapi.brickverse.dev/graphql 打开 Playground:
image.png
它工作得很好,为前端 https://taro.jefftian.dev/pages/subpages/brickverse/index 提供了服务。
image.png
另外,之前又部署了一个 GraphQL Gateway,详见《Free Arch: GraphQL Federation 初体验(成功,且丝滑!) - Jeff Tian的文章 - 知乎 》。现在,希望在原有的 GraphQL Gateway 里,将新部署的 Strapi GraphQL 联邦进来。
不过,这次就没有 GraphQL 联邦初体验那么丝滑了,花了整整两天时间才搞定!

最终效果

最终效果就是可以通过万能 BFF 的 GraphQL Gateway https://sls.pa-ca.me/stg/gateway 来访问 Strapi 的 GraphQL 服务了:
image.png

难点

本来,联邦 Strapi 的 GraphQL 就应该像联邦其他的 GraphQL 服务一样丝滑,然而,试了一下并不行。原因是 Strapi 4 的 GraphQL 并不支持被联邦。于是找到了一个大佬写的开源库: https://github.com/0xR/graphql-transform-federation,看上去是可以用作一个中间件,将一个原来不支持被联邦的 GraphQL 服务,包装成一个支持联邦的 GraphQL 服务。
image.png
这正是我想要的!
不幸的是,通过实测,根本跑不起来。原因它依赖的很多 GraphQL 库的版本都太老了,看了一下其最新发版时间是在 4 年前,不能适应我的项目。

解决办法

我将它 fork 了过来,将相应的包升级后,发布了一个 @jeff-tian/graphql-transform-federation。通过在项目中使用 @jeff-tian/graphql-transform-federation,成功地将它联邦进来了!
这就是《修改 node_modules 的三种方式,隆重推荐 patch-package - Jeff Tian的文章 - 知乎 》中提到的修改 node_modules 的方式之一,对于修复第三方库的场景,真是屡试不爽,推荐你也使用!