Effect v4 Beta:重写运行时、更小的bundle与统一包系统

用于构建生产级应用、强调结构化并发和类型化错误处理的 TypeScript 框架Effect,最近发布Effect v4 beta版本,带来了重写后的运行时、显著缩小的 bundle,以及统一的包生态。

Effect v4 beta 引入了多项变化,包括核心 fiber 运行时的完全重写、生态包共享单一版本号的统一包管理系统,以及新的不稳定模块机制,这让新功能可以先在核心包中发布,而无需立即承诺 semver 稳定性。该版本还带来了 bundle 体积的缩减。

Effect v4 最受关注的改动之一是核心 fiber 运行时的完全重写,目标是更低的内存开销、更快的执行速度和更简化的内部实现。根据发布博客描述,一个仅使用 Effect、Stream 和 Schema 的最小程序,体积从 v3 的约 70kB 降到 v4 的约 20kB。这直接回应了前端场景中对 Effect 最常见的顾虑之一。

Effect 用户的长期痛点之一是生态系统内的版本管理。在 v3 中,像effect@effect/platform@effect/sql这类包都会分别独立发布版本,版本不同步时常引发兼容性的问题。在 v4 中,所有生态包共享同一版本号并统一发布。原先位于@effect/platform@effect/rpc@effect/cluster中的核心能力已并入主包effect,独立包仅保留平台特定或供应商特定的实现,例如,SQL 驱动和 AI provider。团队在公告中也提到,这意味着某些版本发布可能并没有实际的改动,但他们认为这是换取版本对齐和一致开发体验的可接受代价。

Effect v4 还引入了不稳定模块,可以通过effect/unstable/*路径导入。这让团队可以在不承诺严格 semver 保证的前提下先交付新的能力。本次发布包含17个不稳定模块,覆盖 AI、HTTP、Schema、SQL、RPC、CLI、workflow 和 clustering。随着这些模块成熟,它们会晋升到顶层effect/*命名空间。

Prisma 创始人Johannes Schickling在X上表示:

它通过更快、更小、更简单的版本,回应了最常见的痛点和反馈。

Val Town 工程师 Tom MacWright 在2026年3月的一篇博客中写道:

v4 看起来确实令人兴奋:更小、更统一、更快的模块是个好消息。

他随后这样谈及采用情况:

我们还没迁移,因为我们还在用一些已弃用的 API,比如 Runtime,而且我通常会避免在生产软件里使用 beta 版本。

此外,开发者 Sandro Maglione 在记录多个代码库的迁移过程时提到,gzip 后的 worker bundle 从 900kB 降到了 779kB。但他也提醒,在更大型项目中,AI 辅助迁移可能会让智能体陷入“偏题和混淆仓库与 API”的现象。早期采用者还在 Convex 这类受限环境中报告了运行时兼容性问题,当时被屏蔽的全局对象会导致即时失败。该问题目前已经得到了解决。

对于考虑迁移的团队来说,EffectLayerSchemaStream的核心编程模型保持不变。官方已经提供了迁移文档:通用的v3到v4指南会链接到具体的核心与模块指南。另外,还有一份介绍 schema 重写的markdown文档。团队表示后续会提供 codemod 和 AI 辅助迁移工具。

Effect 是由Effectful Technologies 开发并维护的开源 TypeScript 框架。它为前后端 TypeScript 应用提供了类型化错误处理、结构化并发、依赖注入和可观测性的基础能力。

原文链接:

Effect v4 Beta: Rewritten Runtime, Smaller Bundles and Unified Package System