Nest.js你學不會系列-初識Nest

前言

最近在學習研究 Nest 框架,可是在學習過程當中除了參考翻閱官方文檔外國內幾乎沒有多少資料能系統的講解 Nest 的相關內容,因此打算想經過我本身學習的角度講解下 Nest 框架,不知道能堅持多久,也可能有錯誤或遺漏的地方,歡迎你們批評指正。node

下面我學習 Nest 的主要信息來源,在編寫過程當中還會有其餘途徑獲取的信息會在文末給出:git

什麼是 Nest

Nest 是一個用於構建高效,可擴展的 Node.js 服務器端應用程序的框架。它使用漸進式 JavaScript,內置並徹底支持 TypeScript(但仍然容許開發人員使用純 JavaScript 編寫代碼)並結合了 OOP(面向對象編程),FP(函數式編程)和 FRP(函數式響應編程)的元素。express

Nest 框架底層 HTTP 平臺默認是基於 Express 實現的,因此無需擔憂第三方庫的缺失。 Nest 旨在成爲一個與平臺無關的框架。 經過平臺,能夠建立可重用的邏輯部件,開發人員能夠利用這些部件來跨越多種不一樣類型的應用程序。 從技術上講,Nest 能夠在建立適配器 後使用任何 Node HTTP 框架。 有兩個支持開箱即用的 HTTP 平臺:express 和 fastify。npm

Nest 提供了一個開箱即用的應用程序架構,容許開發人員和團隊建立高度可測試,可擴展,鬆散耦合且易於維護的應用程序。編程

在利用 NestJs 框架中,開發者能夠體驗到 NestJs 清晰的模塊組織方式,隔離應用的各個工做區間;在各類工做區間都涉及不同的設計模式,好比面向對象的SOLID原則在整個應用構建中的體現,AOP、DI、IoC 等在各個核心部件中的應用,OOP、FP、FRP 在各模塊編碼中的完美結合,都給開發中帶來不同的體驗。json

Nest 的特性

  • 依賴注入容器
  • 模塊化封裝
  • 可測試性
  • 內置支持 TypeScript
  • 可基於 Express 或者 fastify

什麼狀況下使用 Nest

若是是一個簡單的應用,其實用什麼框架都無所謂,一個框架用 100 行代碼實現,另外一個用 80 行,區別不大。但涉及到企業級的應用,分分鐘有上萬行的代碼,代碼的組織結構就變得很重要了。若是代碼拆分不合理,一個 JS 文件就有上千行的代碼,後期的維護成本會很是的高。再考慮到複雜項目參與者衆多,沒有一個規範去約束的話,每一個人寫出來的代碼風格迥異,協做起來會很難受。上文提到的幾個框架對項目代碼的架構要麼是沒約束,要麼就是約束比較弱或者看起來很彆扭。相比之下Nest的實現就很簡潔,用起來很順手。設計模式

安裝

在安裝前請確保您的操做系統上安裝了 Node.js(> = 8.9.0)。

  • 使用 CLI
$ npm i -g @nestjs/cli
  $ nest new project-name
  • 使用 git
$ git clone https://github.com/nestjs/typescript-starter.git project
  $ cd project
  $ npm install
  $ npm run start
  • 手動建立
$ npm i --save @nestjs/core @nestjs/common rxjs reflect-metadata

運行

$ nest start

而後咱們訪問 http://localhost:3000 就能夠看到 Hello World! 了。

從上面的命令行中能夠看出來整個項目是用 ts-node 跑起來的,這樣的目的就是在開發環境節去了編譯 .ts 的過程(其實是 ts-node 在背後作了這個事情)。和其餘 ts-node 項目不一樣的是,大多數 ts-node 運行在內存中,可是咱們經過項目目錄發如今 start 時會產生一個 dist 目錄,哪怕是在開發環境其實咱們訪問的也是 dist 文件中的內容, 咱們能夠經過修改 tsconfig.json 中的 outDir 來修改輸出的目錄地址。

若是想要 watch 文件的修改建議使用 npm run start:dev 啓動項目。

好了,今天這節就講到這裏,後續咱們會針對 AOP、DI、IoC、OOP、FP、FRP 以及依賴注入容器和模塊化封裝等名稱做單獨的解釋。

相關文章
相關標籤/搜索