写点什么

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

作者:Daniel Curtis
  • 2026-06-10
    北京
  • 本文字数:1380 字

    阅读完需:约 5 分钟

TypeORM 团队发布了 TypeORM 1.0,这是这款广受欢迎的 TypeScript 和 JavaScript ORM 的首个主要版本,标志着该项目自 2016 年创建以来,终于告别了 1.0 之前的版本状态。

TypeORM 1.0 移除了长期废弃的 API,更新了平台要求,并包含在 0.3.x 版本周期中积累的数十项 Bug 修复和新功能。此次发布源于 2024 年底新维护者接手后,项目活动重新活跃起来。项目团队报告称,2025 年共发布了 8 个补丁版本,合并了 575 个拉取请求(相比之下,前一年只有 63 个),并关闭了超过 2300 个问题,同时该库的每周下载量仍然保持在近 200 万次。

这次更新的主要变化在于基础架构的现代化改造。TypeORM 现在已经编译为 ECMAScript 2023,也就是说, Node.js 20 成为支持的最低版本,而 Node 16 和 18 不再受支持。此外,该版本还移除了若干占用资源较多的依赖项:旧版 mysql 客户端已被 mysql2 取代,sqlite3 已被 better-sqlite3 取代,哈希功能则迁移到了原生的 crypto 模块中。

新特性侧重于实用的数据操作。InsertQueryBuilder 现在可以通过新方法 valuesFromSelect() 执行 INSERT INTO ... SELECT FROM ... 语句;在支持 RETURNING 子句的数据库中,update() 和 upsert() 方法新增了返回选项;QueryRunner 支持使用 await 语法进行自动清理。根据发布说明,该版本还强化了安全性:所有驱动程序在进行模式检查和 DDL 操作时均采用参数化查询和转义标识符;对 orderBy 条件进行运行时验证;对 .limit() 进行更严格的检查。

迁移过程由一个自动代码转换工具 codemod 提供支持。该工具可在原地更新导入语句、重命名 API 、修改 find 选项语法以及依赖项,并提供一个可以预览更改的标志。

npx @typeorm/codemod v1 src/ --dry
复制代码

升级指南中记录了若干需要手动更改的的地方,例如移除了 Connection 别名并改用 DataSource,移除了 findByIds 和 findOneById 方法,以及新引入了一项默认行为:当 where 条件中的值无效时,系统会抛出异常而非静默忽略。NestJS 用户基本不受影响,但应升级至 @nestjs/typeorm v11.0.1 或更高版本,codemod 会自动进行版本更新。

各界的关注点主要集中在版本号所传递的信号上。多年来,Reddit 上的讨论帖一直都在询问 TypeORM 是否正在走向消亡或已被弃用,这种担忧与 Hacker News 上早先关于其版本长期达不到 1.0 的讨论如出一辙。这次跃升至 1.0 版本,被广泛视为维护工作重回正轨的明证。在 Threads 上,一位开发者称,这次发布是 JavaScript ORM 领域的一个重要信号,并特别提到了对 INSERT INTO SELECT 的支持以及跨驱动程序的隔离级别。

在一个竞争激烈的市场中,TypeORM 依然在与 Prisma 展开竞争——后者在 7.0 版本中重写了查询引擎;同时也与 Drizzle 竞争——在 2026 年 Encore 的对比评测中,Drizzle 在边缘部署和以 SQL 为核心的团队中排名第一。这份对比报告将 TypeORM 定位为现有代码、企业级模式和非主流数据库的首选,而 1.0 版本的发布正是为了捍卫这一细分市场。

TypeORM 是一个面向 TypeScript 和 JavaScript 的开源 ORM,可以在 Node.js 及其他平台上运行。它同时支持数据映射(Data Mapper)和活动记录(Active Record)模式,并兼容 PostgreSQLMySQL、 MariaDB、 SQLite、 SQL Server、 Oracle Database、 SAP HANA、 MongoDB、 Google Cloud Spanner 等数据库。

原文链接:https://www.infoq.com/news/2026/06/typeorm-1-released/