TypeORMORMNode.js开源

TypeORM 历经近十年发展终于迎来 1.0 版本,标志着项目维护工作重启

Daniel Curtis(译者:平川)··原文链接
收录于 2026/6/16 10:00:06

一、项目背景

  • ORM 定位:TypeORM 是面向 TypeScript 和 JavaScript 的开源 ORM,可运行于 Node.js 及其他平台。
  • 设计模式:同时支持 Data Mapper(数据映射)Active Record(活动记录) 两种模式。
  • 数据库兼容:PostgreSQL、MySQL、MariaDB、SQLite、SQL Server、Oracle Database、SAP HANA、MongoDB、Google Cloud Spanner。
  • 历史包袱:自 2016 年创建后长期停留在 0.3.x,社区多年担忧项目"走向消亡或已被弃用",Reddit、Hacker News 上类似讨论屡见不鲜。
  • 维护者交接:此次发布源于 2024 年底新维护者接手,项目活动随之重新活跃。

二、1.0 之前的活跃度数据

  • 2025 年共发布 8 个补丁版本
  • 合并 575 个 PR(前一年仅 63 个,增幅约 9 倍)
  • 关闭 超过 2300 个 Issue
  • 每周下载量仍保持在 近 200 万次

三、1.0 主要变化

1. 基础架构现代化

  • 编译目标:升级到 ECMAScript 2023
  • Node.js 支持
    • 最低支持版本:Node.js 20
    • Node 16 / 18 不再受支持
  • 依赖项清理(移除资源占用较大的旧依赖):
旧依赖新替代
旧版 mysql 客户端mysql2
sqlite3better-sqlite3
哈希功能原生 crypto 模块

2. 实用的数据操作新特性

  • InsertQueryBuilder.valuesFromSelect():可直接执行 INSERT INTO ... SELECT FROM ... 语句。
  • update() / upsert() 返回选项:在支持 RETURNING 子句的数据库中,可获取更新/插入后的数据。
  • QueryRunner 支持 await 自动清理:简化资源管理。
  • 安全性强化
    • 所有驱动程序在进行模式检查和 DDL 操作时采用参数化查询和转义标识符
    • orderBy 条件进行运行时验证
    • .limit() 进行更严格的输入检查

四、迁移指南

1. 自动迁移工具 codemod

npx @typeorm/codemod v1 src/ --dry
  • 支持原地更新导入语句
  • 自动重命名 API
  • 自动修改 find 选项语法
  • 自动更新依赖项
  • --dry 标志可预览更改

2. 需要手动修改的破坏性变更

  • 移除 Connection 别名:统一改用 DataSource
  • 移除 findByIdsfindOneById 方法
  • 新默认行为:当 where 条件中的值无效时,系统抛出异常而非静默忽略(行为更安全、更可预测)
  • NestJS 用户:基本不受影响,但应升级 @nestjs/typeormv11.0.1 或更高版本(codemod 会自动更新版本)

五、维护团队信息

  • 新维护者接手时间:2024 年底
  • 社区与生态反馈
    • 在 Threads 上,有开发者评价这次发布是 JavaScript ORM 领域的重要信号,并特别提到对 INSERT INTO SELECT 的支持以及跨驱动程序的隔离级别
    • 1.0 版本被广泛视为维护工作重回正轨的明证

六、竞争格局

TypeORM 1.0 发布的背景是 ORM 市场竞争激烈:

  • Prisma:在 7.0 版本中重写了查询引擎
  • Drizzle:在 2026 年 Encore 的对比评测中,于边缘部署以 SQL 为核心的团队场景下排名第一
  • TypeORM 定位:根据上述对比报告,TypeORM 被定位为现有代码库企业级模式非主流数据库场景的首选;1.0 版本的发布正是为了捍卫这一细分市场

七、结论

TypeORM 1.0 不仅仅是一个版本号的变化,更承载着社区对项目"复活"的期待:

  1. 通过架构现代化和依赖清理,偿还了长期的技术债
  2. 补齐了 INSERT INTO SELECT 等实用的数据操作 API
  3. 借 codemod 工具将升级成本控制在可控范围
  4. 明确了自己的细分市场定位——存量代码、企业模式、多元数据库

对于仍在大规模使用 TypeORM 的团队,1.0 是一个值得跟进的升级窗口;对于在 Prisma / Drizzle / TypeORM 之间选型的团队,1.0 也让 TypeORM 重新成为可认真考虑的选项。