为什么 Drizzle ORM 一个月都无法向 NPM 发布新版本
Drizzle ORM 由于包清单(packument)体积超过了 NPM 的 4MB 限制,长达一个月无法发布新版本。问题的根源在于 Drizzle Kit 将完整的数据库内省结果嵌入到了 package.json 中,导致每次发布体积膨胀。该团队最终通过将内省数据迁移到独立文件并清理 package.json 解决了问题,但这也暴露了 NPM 生态系统在处理大型包清单时的局限性。
背景速读
- Drizzle ORM 是一个近年流行的 TypeScript 数据库工具(Object-Relational Mapping),让开发者用代码而非 SQL 操作数据库。它的 GitHub 星标超过 35k,在 Node.js 生态中增长很快。
- 本文事件:Drizzle 约一个月无法向 NPM(JavaScript/TypeScript 最大的包注册中心)发布新版。原因是 NPM 对每个包有大小限制,Drizzle 的包意外超过了该阈值。
- NPM 的 "packument" 指一个包的所有元数据(版本列表、依赖、描述等),每个发布版本都会追加到这个文件中。NPM 对 packument 有 4MB 的软限制和约 10MB 的硬限制,超过后会拒绝写入新版本。
- 深层原因:Drizzle 的 CI/CD 脚本使用了 NPM 的 `--dry-run` 模式来生成包信息,但该模式会生成调试用的假版本号(例如 0.0.0),累计大量垃圾条目撑大 packument,最终触达限制。
- 此事暴露出 NPM 生态的一个隐患:注册中心对包元数据的增长几乎没有自动监控或预警,出问题后需要人工联系 NPM 支持团队处理,耗时数周。