Nest 是一個漸進的 Node.js 框架,它可以在 TypeScript 和 JavaScript (ES6、ES7、ES8)之上構建高效、可伸縮的企業級伺服器端應用程式。
Nest 基於 TypeScript 編寫並且結合了 OOP(物件導向程式設計),FP(函數語言程式設計)和 FRP (函數式響應程式設計)的相關理念。在設計上的很多靈感來自於 Angular,Angular 的很多模式又來自於 Java 中的 Spring 框架,依賴注入、面向切面程式設計等,所以我們也可以認為:Nest 是 Node.js 版的 Spring 框架
Nest 框架底層 HTTP 平臺預設是基於 Express 實現的,所以無需擔心第三方庫的缺失。
NestJs 的核心思想:就是提供了一個層與層直接的耦合度極小,抽象化極高的一個架構體系。
與其它框架一樣,NestJS也有自己的腳手架,它可幫助我們快速初始化Nest專案以及開發和維護 Nest 應用程式。
絕大多數人可能會選擇全域性安裝,因為方便,但需要注意的是,全域性安裝任何npm
軟體包都會將確保它們執行正確版本的責任留給我們開發者自身。這還意味著,如果你有不同的專案,每個專案都將執行相同版本的 CLI。
npm install -g @nestjs/cli
⚠️這裡需要注意Node版本,可能會遇到腳手架安裝成功了但初始化專案時報錯,這裡建議使用高版本node,我這裡用是node版本是16.19.0
當然你也可以不選擇全域性安裝,Nest
提供了@nestjs/cli
包同樣可以使用nest
命令
npx @nestjs/cli@latest
安裝完腳手架之後我們可以通過nest --help
看看它都有哪些命令:
該命令是用來初始化一個Nest
專案的
nest new project-name
該命令表示初始化一個名為project-name
的Nest
專案,並且會幫你安裝好所有必要的依賴,簡直就是一步到位,非常棒~
上圖中我們可以看到nest|n
,n
代表nest
的別名,所以為了方便,你也可以這樣使用:
nest n project-name
該命令可以為我們生成各種程式碼,其中包括:控制器Controller、服務service、模組module等。
# 生成控制器
nest generate controller controller-name
# 生成服務
nest generate service service-name
# 生成模組
nest generate module module-name
當你覺得一個一個生成很麻煩時,可以使用下面這個命令
nest g resource filename
當你執行這個命令時,它會讓你選擇生成那種型別的程式碼:
這裡我們直接選擇REST API
,它會再問你是否需要生成CURD程式碼
我們選擇是就好了,這個它就為我們生成了一個完整的CURD程式碼。
我們會發現生成的檔案中可能會有一些測試檔案,當我們不需要這些檔案時,可以直接刪除掉,或者在生成時加上--no-spec
表示不生成測試檔案
nest g resource filename --no-spec
當然它還可以生成更多型別的程式碼,可以通過以下命令檢視:
nest g --help
該命令用於啟動開發服務,支援 watch 和偵錯
# 啟動
nest start
# 啟動並監聽檔案變動
nest start --watch
#啟動並偵錯
nest start --debug --watch
這些命令可以在package.json
檔案中找到
所以我們本地開發一般使用npm run start:dev
啟動專案
該命令用於專案打包
nest build
它有兩種編譯方式可選:--wepback
和 --tsc
,預設是 tsc 編譯,也可以切換成 webpack。
區別在於tsc
模式並不會將node_modules
模組打包進去,而webpack
模式則會將node模組打包成單檔案
Nest
腳手架與其它腳手架不同的是,它生成的專案下會有一個腳手架組態檔nest-cli.json
,上面我們用的命令的很多選項都可以在這個檔案中直接設定。
該檔案的頂級屬性如下:
"collection"
:指向用於生成元件的原理圖集合;(最好不要改)"sourceRoot"
:指向標準模式結構中單個專案的原始碼根目錄,或monorepo 模式結構中的預設專案"compilerOptions"
:編譯相關的設定選項"generateOptions"
:全域性生成相關的設定選項"monorepo"
:(僅限 monorepo)對於 monorepo 模式結構,該值始終為true
"root"
:(僅限 monorepo)指向預設專案的專案根目錄這些屬性指定要使用的編譯器以及影響任何編譯步驟的各種選項,無論是作為nest build
或的一部分nest start
,也不考慮編譯器,無論tsc
是還是 webpack。
名稱 | 描述 |
---|---|
webpack |
如果是true ,使用webpack編譯。如果false 存在或不存在,請使用tsc . 在 monorepo 模式下,預設為true (use webpack),在標準模式下,預設為false (use tsc )。 |
tsConfigPath |
(僅 monorepo ) 指向包含在不帶選項的情況下呼叫或呼叫tsconfig.json 時將使用的設定的檔案(例如,當構建或啟動預設專案時)。nest build``nest start``project |
webpackConfigPath |
指向 webpack 選項檔案。如果未指定,Nest 會查詢檔案webpack.config.js . 請參閱下面的更多細節。 |
deleteOutDir |
如果true ,則每當呼叫編譯器時,它都會首先刪除編譯輸出目錄(如 中設定tsconfig.json ,預設為./dist )。 |
assets |
每當編譯步驟開始時,啟用自動分發非 TypeScript 資源(在增量編譯模式下不會發生資源--watch 分發)。詳情請參閱下文。 |
watchAssets |
如果true ,則以監視模式執行,監視所有非 TypeScript 資源。 |
manualRestart |
如果,則啟用手動重新啟動伺服器的true 快捷方式。rs 預設值為false 。 |
builder |
指示 CLI 使用什麼builder 來編譯專案(tsc 、swc 或webpack )。要自定義構建器的行為,您可以傳遞包含兩個屬性的物件:type ( tsc 、swc 或webpack ) 和options 。 |
typeCheck |
如果true ,則啟用 SWC 驅動專案的型別檢查(當builder 為時swc )。預設值為false 。 |
這些屬性指定命令使用的預設生成選項nest generate
。
名稱 | 描述 |
---|---|
spec |
如果值為布林值,則預設情況下true 啟用spec 生成,值為 則false 禁用生成。CLI 命令列上傳遞的標誌會覆蓋此設定,專案特定的generateOptions 設定也會覆蓋此設定(更多內容見下文)。如果該值是一個物件,則每個鍵代表一個原理圖名稱,並且布林值確定是否為該特定原理圖啟用/禁用預設規範生成。 |
flat |
如果為 true,則所有生成命令都將生成平面結構 |
本系列文章會持續更新哦,關注前端南玖,敬請期待吧~
-------------------------------------------
如果這篇文章有幫助到你,❤️關注+點贊❤️鼓勵一下作者,文章公眾號首發,關注 前端南玖 第一時間獲取最新的文章~
掃描下方二維條碼關注公眾號,回覆進群,拉你進前端學習交流群