NestJS 是一個以 TypeScript 為基礎的 Node.js 伺服器端框架,2026 年 8 月 27 日推出第十二個主要版本。截至 2026 年 10 月 18 日,專案在 GitHub 累積 76,857 顆星標、8,589 次複製與 22,253 次提交,貢獻者規模約 786 人,採用 MIT 授權,核心套件 @nestjs/core 在 npm 的單月下載量約 6,648 萬次。第十二版的核心改動集中在三處:核心套件全面改以 ESM 形式發佈、驗證與設定改用標準 Schema 規格,以及透過 @nestjs/observe 提供與框架生命週期整合的原生可觀測性。

NestJS 儲存庫 README 開頭,頂端為紅色漸層的 Nest 標誌,下方標語說明這是一套用於建構高效、可擴展伺服器端應用的 Node.js 框架,接著依序列出 Description、Philosophy、Getting started、Questions、Issues、Observability 與 Consulting 各章節,並附上 npm 版本、授權、下載量徽章與官方 Discord 連結

NestJS 12 是什麼?

NestJS 12 是這套 Node.js 框架於 2026 年 8 月推出的主要版本,核心套件全面改以 ESM 形式發佈,並引入標準 Schema 驗證與原生可觀測性 SDK。

專案由 Kamil Mysliwiec 於 2017 年 2 月建立,設計上大量借用 Angular 的分層與依賴注入概念,把控制器、服務與模組的組裝方式固定下來,底層預設使用 Express,亦可切換至 Fastify。專案過往的定位並非與 Express 這類極簡框架競爭,而是補上伺服器端應用最常見的架構缺口,讓測試、擴充與長期維護有清楚的分界。

第十二版延續同一條路線,但改動幅度覆蓋整個生態系統。官方發佈說明指出,現有 CommonJS 應用在多数情況下無需改寫即可升級,因為現代 Node.js 已支援 require(esm);是否把自家程式碼遷移到 ESM 仍屬可選項。相對地,nest new 建立新專案時會詢問採用 CommonJS 或 ESM,兩種選項各有對應的測試與建置預設值。

NestJS 12 的 ESM 套件化帶來什麼改變?

所有 Nest 核心套件改以 ESM 形式發佈,新專案可選擇 CommonJS 或 ESM,並要求 Node.js 20.19 或 22.12 以上,21.x 不獲支援。

套件格式轉換是這一版最根本的變化。官方說明,require(esm) 機制讓既有 CommonJS 應用得以照常運作,但自行撰寫的啟動腳本、建置工具鏈與測試執行器若有 CommonJS 專屬假設,仍需要逐一檢視。專案亦明確列出執行環境門檻:升級指令會拒絕在舊版 Node.js 上執行,包含整個 21.x 系列。

這項改動的連帶效果出現在測試與打包層。新建立的專案在 ESM 模式下預設使用 Vitest,CommonJS 專案則沿用 Jest;打包器方面,Rspack 成為單一儲存庫的預設選項,原有的 webpack 相關旗標與設定欄位被標示為棄用,官方建議改用 --builder rspack。對已在維運中的大型專案而言,升級路徑因此同時涉及執行環境、測試與建置三層。

NestJS 12 如何統一驗證與序列化流程?

路由裝飾器新增 schema 選項,可搭配 Zod、Valibot 與 ArkType;序列化與設定模組改用同一規格,class-validator 流程維持不變。

驗證機制的調整以標準 Schema 規格為核心。@Body()、@Query()、@Param() 與 @RawBody() 這幾個裝飾器新增 schema 選項,開發者可把既有的 Zod 或 Valibot schema 直接掛上,再註冊 StandardSchemaValidationPipe 進行驗證。官方強調,裝飾器本身只負責附加中介資料,實際驗證仍由管道處理,因此行為邊界與過去一致。

序列化與設定模組同步跟進。StandardSchemaSerializerInterceptor 讓回應輸出的驗證與轉換沿用同一批 schema;@nestjs/config 的 validationSchema 不再限定 Joi,改為接受任何相容規格,既有 Joi 使用者需升級至第十八版以上,並把函式庫專屬設定移入 validationOptions.libraryOptions。以類別為基礎的 DTO 流程仍完整保留,官方表明沒有移除計畫。

@nestjs/observe 原生可觀測性解決了什麼問題?

該 SDK 直接接入框架自身的請求生命週期,而非在 HTTP 伺服器層修補,能自動涵蓋 HTTP、GraphQL、gRPC、佇列消費者與排程工作,無需另設收集器。

傳統 APM 代理的運作方式是在伺服器層攔截請求,因此追蹤結果往往只剩下一條 HTTP 路徑。新推出的 NestJS Observe 改以應用選項 instrument 接入框架內部的請求生命週期,回報內容以控制器、提供者、解析器與佇列消費者為單位,軌跡讀起來更接近呼叫關係圖。

涵蓋範圍包括 HTTP、GraphQL、gRPC 與微服務傳輸,以及佇列消費者與排程執行,開發者不需要手動建立追蹤區段,也不必自行架設收集器。官方提供的免費額度為每月三十萬筆事件,並附設無需註冊的線上示範看板。這項功能屬可選項目,nest new 與 nest upgrade 均可透過 --observe 旗標協助接線。

NestJS 儲存庫首頁頂部,左側顯示儲存庫路徑 nestjs/nest 與預設分支 master,右側顯示約 76.9K 顆星標、8.6K 次複製,About 區塊說明這是用於建構高效、可擴展與企業級伺服器端應用的漸進式 Node.js 框架,並標示 MIT 授權、官方官網 nestjs.com 與主題標籤,下方列出最新的提交訊息與發佈版本

NestJS 12 的 CLI 與工具鏈有哪些更新?

CLI 全面重寫為 ESM,新增升級與雲端部署指令,Rspack 成為單一儲存庫預設打包器,oxlint 取代 ESLint,並支援 bun。

命令列工具在這一版被完整重構,原始碼遷移為 ESM,測試框架由 Jest 換成 Vitest,每個指令都補上端對端測試,指令類別改為接收具型別的內容物件。新增的 nest upgrade 指令可把第十一版專案升上第十二版,並自動套用遷移中屬於機械性的部分,包括設定檔中的 webpack 選項、GraphQL 的 playground 更名,以及多項相依套件版本調整;官方建議先以 --dry-run 檢視變更清單。

另一個新指令 nest deploy 負責把應用部署到官方雲端服務 Mau,首次使用時會自動安裝對應套件,並把參數原樣轉送。工具鏈的預設值同時出現數項更替:新專案改用 oxlint 取代 ESLint,bun 與 npm、yarn、pnpm 並列為支援的套件管理器,而 angular 範本指令已被移除。建置選項新增 --parallel 與 --emit-declarations,後者用於 SWC 編譯情境。

NestJS 12 有哪些破壞性變更需要注意?

生命週期鉤子改按元件階層呼叫,NATS 套件換為新模組,GraphQL 訂閱改用 graphql-ws,GraphiQL 取代 playground,日誌參數預設啟用。

影響範圍最廣的一項是生命週期鉤子的呼叫順序。官方說明,初始化、銷毀與測試期間的鉤子改為依元件階層層級觸發,涉及多個提供者或模組之間順序假設的專案需要重新檢視。訊息傳輸方面,舊有 nats 套件被 @nats-io/transport-node 取代,封包改以 JSON 字串序列化,自訂反序列化器會收到完整的 NATS 訊息物件。

GraphQL 使用者面臨兩項變動:subscriptions-transport-ws 支援被移除,必須改用 graphql-ws,由於兩者協定不相容,客戶端需要一併更新;預設的圖形化 IDE 由 playground 改為 GraphiQL,設定方式改為傳入選項物件。其餘項目包括自訂管道簽章因 ArgumentMetadata 改為泛型而需調整、ConsoleLogger 的結構化參數改為預設啟用,以及 webpack 命令列流程被標示棄用。官方指出,這些項目大多可由升級指令自動處理。

NestJS 12 的工程數據與維護規模如何?

專案累積 76,857 顆星標、8,589 次複製與 22,253 次提交,約 786 位貢獻者,已發佈 170 個版本,採用 MIT 授權,核心套件單月下載量約 6,648 萬次。

76,857Stars
8,589Forks
22,253Commits
786Contributors
170Releases
MITLicense

維護節奏在第十二版發佈後維持穩定。從 2026 年 9 月至今已推出九個版本,最新一版為 10 月 12 日的 v12.1.3,內容以 SSE 串流生命週期、請求範圍增強器與 Express 中介層邊界案例的修正為主。儲存庫的公開議題數量維持在三十三項,其中屬純議題者僅九項,其餘為合併請求,反映專案把問題分流至官方討論區與社群頻道的策略。

NestJS 儲存庫的貢獻者統計頁面,上方顯示自 2020 年 7 月至 2026 年 10 月的每週提交數長條圖,下方列出主要貢獻者與各自的提交次數,左側為 Commits、Code frequency、Dependency graph、Network 與 Forks 等 Insights 導覽項目

NestJS 12 與其他 Node.js 框架有何不同?

與 Express、Fastify 等極簡框架相比,NestJS 提供現成的應用架構與依賴注入;代價是學習曲線較陡,換來大型團隊較一致的分層與測試方式。

差異主要在問題設定的層次。Express 與 Fastify 解決的是路由與請求處理,應用結構交由開發者自行決定;NestJS 則把模組、提供者、控制器與依賴注入定義成框架的一等公民,並以裝飾器描述中介資料。這種取向適合人數較多、需要長時間維護的專案,但也意味新進成員要先理解框架的分層約定。

第十二版的多項改動都指向同一目標。原生可觀測性讓追蹤結果以框架概念呈現,標準 Schema 讓驗證與設定規格外部化,升級指令則把主要版本的遷移成本壓低。這些安排都降低了框架本身與應用程式碼的耦合程度,也讓 Upgrade 路徑不至於成為專案的長期負擔。

出處連結有哪些?

本文資訊整理自 NestJS 的 GitHub 儲存庫與官方發佈說明,包含第十二版遷移指南、可觀測性文件、CLI 重構說明,以及 README 所述的專案定位與贊助模式。

  • GitHub 儲存庫:https://github.com/nestjs/nest
  • 第十二版發佈說明:https://github.com/nestjs/nest/releases/tag/v12.0.0
  • 遷移指南:https://docs.nestjs.com/migration-guide
  • 可觀測性文件:https://docs.nestjs.com/observability/overview
  • 官方網站與文件:https://docs.nestjs.com

總結:NestJS 12 適合什麼團隊?

適合已採用 NestJS 且需要統一驗證規格、可觀測性與工具鏈的團隊;新專案可直接受益於 ESM 預設;仍在 CommonJS 的專案可先以升級指令試跑再決定時程。

第十二版沒有重新發明框架的抽象層,而是把長期累積的周邊議題一次收斂:套件格式、驗證規格、可觀測性與工具鏈。對已在維運的專案,升級的主要成本落在執行環境版本、測試框架與打包設定三處,升級指令能處理其中較機械的部分,但其餘仍需人工檢視。

對新專案而言,ESM 與 oxlint、Vitest、Rspack 的預設組合已接近目前 Node.js 生態的主流選擇,Standard Schema 亦讓驗證邏輯能沿用社群既有的函式庫。至於仍在觀望的團隊,可先以 nest upgrade --dry-run 檢視自身專案會產生的變更清單,再評估是否隨第九個修補版本一併推進。