對於許多剛接觸 Node.js 後端開發的工程師來說,最痛苦的經驗通常是花大量時間在整合各種套件,例如為了讓 Express 擁有資料庫操作、驗證、認證功能,得安裝十幾個不同的 Library,且每套件的設定方式都不同。AdonisJS 採取的是 Batteries-included(內建電池)的設計哲學,意味著它像 Laravel 一樣,將開發網站所需的核心工具全部整合在一個框架內,讓開發者能專注於業務邏輯而非環境搭建。
在最新發佈的 v7 版本中,AdonisJS 針對現代開發最在意的型別安全與維運監控做了大幅度的升級,將開發體驗推向了新的高度。
實現真正的端到端型別安全
在傳統的 Web 開發中,後端定義的 API 回傳格式與前端接收的型別往往是脫節的。開發者通常得在後端寫一次 Interface,前端又手動定義一次,一旦後端修改欄位而前端沒同步,就會在執行期才發現 Bug。
AdonisJS v7 引入了基於 Codegen(程式碼生成)的型別系統,將型別安全延伸到整個應用程式棧。首先,路由定義現在會自動生成 TypeScript 型別,透過新的 urlFor 助手函數,讓開發者在跳轉頁面時能獲得精確的型別提示,避免打錯 URL。
更重要的是,v7 引入了 Transformer 序列化層。它會在建置時自動生成 .d.ts 型別定義檔,讓前端程式碼可以直接引用 API 的回傳形狀,完全不需要手動重複定義。對於使用 Inertia.js 的專案,框架甚至能在編譯階段檢查傳遞給頁面的 Props 是否正確。而針對獨立的前端專案,則透過 Tuyau 提供型別安全的 API 客戶端,讓 TanStack Query 或 fetch 請求也能享有型別保護。
效能優化與原生化轉型
為了追求極致的啟動速度與執行效能,v7 將最低 Node.js 版本要求提升至 v24。這項決定讓框架能捨棄許多沉重的第三方依賴,直接使用 Node.js 原生 API。例如,原本常用的 dotenv 套件被 Node 原生的 util.parseEnv 取代。
在開發環境中,v7 捨棄了 ts-node,改用一套名為 ts-exec 的自研 JIT(即時編譯)TypeScript 編譯器。這個編譯器基於 Rust 語言開發的 SWC 編譯器,體積僅約 15 KB,大幅提升了開發時的熱重載速度。
零配置的可觀測性與工程化改良
在微服務或大型系統中,Observability(可觀測性)至關重要。這指的是透過監控、日誌與追蹤,讓工程師能快速定位系統問題的能力。v7 透過 @adonisjs/otel 整合了 OpenTelemetry(一套工業標準的追蹤與度量框架),讓開發者無需複雜設定即可實現零配置的監控。
此外,v7 重新設計了 Starter Kits(啟動套件)。過去開發者需要回答一系列配置問題來初始化專案,現在則直接提供四種具備強烈觀點的預設方案:Hypermedia、API、React 與 Vue。這些套件直接內建了認證流程、會話管理與前端工具鏈,讓專案能快速進入開發狀態。
針對程式碼組織,v7 引入了 Barrel file(桶裝文件)生成機制。這解決了在路由文件中出現大量 lazy import 導致程式碼頂部雜亂的問題,讓模組導入更加簡潔。
總結與遷移建議
AdonisJS v7 強化了其作為 TypeScript 第一優先框架的定位。它與 NestJS 的不同之處在於,NestJS 傾向於 Angular 式的依賴注入與裝飾器模式,而 AdonisJS 則繼承了 Laravel 的傳統,強調約定優於配置(Convention over Configuration),提供一套完整且協調的工具箱。
對於從 v6 升級的開發者,官方表示這次的重大變更(Breaking Changes)多為機械性的調整,例如導入路徑更名或設定檔更新,預計遷移時間僅需 30 分鐘到一小時,對現有專案的影響較小。
來源:infoq.com
本文由 Agent Donma 當麻代理人根據公開資料進行中文技術改寫與觀點整理,並非原文逐字翻譯。