Apollo GraphQL Client 4.0 发布,提供更精简的打包功能并强化了 TypeScript 的安全性

作者:Daniel Curtis
  • 2025-10-03
    北京
  • 本文字数:1054 字

    阅读完需:约 3 分钟

Apollo GraphQL发布了Apollo Client 4.0,这是一个重大版本更新,带来了更精简的架构、更紧密的 TypeScript 集成、框架无关的 API 和更模块化的特性选择,所有这些功能都是为了减少包的大小并改善开发者的体验。

 

其中一个主要变化是支持按需包含特性。像本地状态管理(@client 指令)和默认的 HTTP 链接这样的特性,除非明确导入,否则不会再打包进来。结合现代化的目标转译(面向 2023 年以后的浏览器和 Node.js 20+)、更好的 ESM 支持和改进的树摇(tree-shaking)优化,许多用户应该能看到来自 Apollo Client 的包的大小减少了20-30%

 

TypeScript方面,4.0 引入了 colocated/namespace 类型(例如useQuery.OptionsuseQuery.Result)、对必需变量更严格的限制、新的dataState属性来区分查询状态(empty、partial、streaming 和 complete)以及模块增强以自定义上下文类型,而不是使用脆弱的泛型。这些变化旨在减少类型错误并提高日常使用中类型的可发现性。

 

此外,错误处理也得到了改进。单一的 ApolloError 已被替换或分解为更具体的错误类,允许更清晰的区分(GraphQL vs 网络 vs 解析),并引入了新的静态.is()类型检查方法以帮助缩小范围。

 

核心库已经与 React 解耦。针对 React 的导出现在位于@apollo/client/react中。这使得在使用 React 钩子与使用非 React 环境中的核心 GraphQL 客户端逻辑时更加清晰,并减少了在非 React 环境使用时的不必要依赖。

 

社区的早期反馈是积极的。一位用户在 X 上分享说:“到目前为止,这对我们团队来说太棒了”,这是他对 GA 版本发布帖子的回应。

 

在 Reddit 上,一位评论者询问从 v3 迁移到 v4 的类型时所推荐的方式,维护者的回应指向了迁移指南,并给出了以下建议:

总的来说,我们不推荐使用生成的钩子,并鼓励使用 TypedDocumentNode 代替,要么通过设置 typed-document-node 代码生成插件,要么通过使用客户端预设,但配置要进行修改。

 

对于考虑迁移的团队,Apollo 提供了详细的迁移指南。关键的破坏性变化包括更新 React 与核心使用的导入、适应新的 dataStateAPI、处理错误类变化,并引入RxJS作为同级依赖。

 

有一个可用的代码修改工具,作者声称只需在项目中运行以下命令,就能在几分钟内完成 90%的迁移:

npx @apollo/client-codemod-migrate-3-to-4 src
复制代码

 

Apollo Client是由 Apollo GraphQL 维护的开源 GraphQL 客户端。它为 JavaScript 和 TypeScript 应用程序提供了管理查询、缓存、变更和订阅的工具,为 React 提供直接的支持,并集成到了范围广泛的框架中。

 

原文链接:

Apollo GraphQL Client 4.0 Released with Leaner Bundles and Strengthened TypeScript Safety