為什麼我推薦使用Angular + Nest.Js

前言

Node.Js問世以來,帶動JavaScript近十年的高速發展。基本上現在以Angular、React.Js、Vue.Js奠定前端三大基礎。
得利於Node.Js,除了前端的網頁開發,也讓JavaScript的觸角延伸至後端、桌面應用、手機APP…
雖然JavaScript本身有許多缺陷,但在微軟推出TypeScript後,讓整體穩健性強化不少!
做為一個獨立開發者,做Side project或有想要打造自己的個人應用,現在各程式語言都有各種方便框架,都能迅速滿足需求!
曾經也嘗試過Python/django、Node.Js/Egg.Js,也去比較過PHP/Lareval、Java/Spring…
一直嘗試找出一個最適合的組合,才打算開始做自己的東西。結果時間都花在最底層的框架裡,什麼都還沒做出來!
於是開始認真思考獨立開發最需要的是什麼…?

自己獨立開發所期望的…

  1. 好擴展!要加功能時,最好框架本身就具備該功能。不必再花心力選擇要用什麼套件。
  2. 易維護!具有清晰的邏輯分離。雖然都是自己寫的,但難保放個半年後再回頭只想掐死當時的自己
  3. 語言統一!可以一個語言就搞定一切,不要切換寫法,避免開發過程思路打結
  4. 整套框架用法相似或一致!讓開發思路相近!
  5. 使用Reactive Programing!雖然剛開始花了些心力學習,但掌握後,真心覺得RP讓邏輯清晰好讀許多!再回頭讀自己的Code,也不太會想掐死自己XD

條件限縮

由於網頁前端直接綁定JavaScript,也就連帶綁定後端得用Node.Js了…
但其實不太喜歡JavaScript本身就有不少缺陷的語言。若非得使用腳本語言,個人還比較喜歡Python。

所幸有TypeScript,至少在IDE可盡量預防掉不少低級的小錯誤。也就是採用的框架至少本身就是TypeScript最佳,不必花心力再行整合
由於自己已經差不多掌握Vue.Js,一開始想說是否就整套採用中國的egg.Js來打造。至少在官方文件上中文還是比較親切的。
而egg.Js是中國阿里已長期採用一段時間,亦可以確定其穩定度。
而自己之前也花了些心力入門Egg.Js了

最後就是Reactive Programing。JavaScript世界裡最具知名度的就是RxJs了!但小小試過在Vue.Js串入RxJs,就是串不太起來QQ。而為了這個,可能還得在Vue.Js、egg.Js上得另花心力融合,不然就是只有在業務邏輯採用。


提到TypeScript以及RxJs,前端就會想到Angular!
以及近幾年才剛推出不久的Nest.Js--仿造Angular風格打造出來的後端,兩者都是原生直接使用我所期望的東西!

嘗試改寫現有Side Proeject

於是開始試著把以前做好的Side project嘗試用Angular + Nest.Js改寫
開發過程中,不熟悉的部份在其中一端學會了,通常另一端可以依樣畫葫蘆
整體開發流暢度相當順暢!會有一套框架全包前後端的錯覺!

缺點嘛,就是Nest.Js的文件說明有時會不夠清晰,沒辦法迅速理解某些部份的使用方式。畢竟算是較新穎的框架,若有看不懂的部份,要Google到答案也會比較辛苦些。但照著官方文件推薦套件去做,基本上足以解決大部份使用情境!
雖然Nest.Js似乎沒有官方文件說明可原生直接使用到多核心,但以小Project來說,仍不是需要煩惱的主要問題,東西先做出來、推廣有成有人要用才是比較首要的事吧XD
若真的流量大到需要多核心,也許再配合PM2之類的套件,此部份仍能Google到不少教學

總結

最後決定落腳於Angular + Nest.Js做為未來Side project的主力結構,不在三心二意的去比較框架優劣。
也深深感受到網路上高手們所說的:

每個框架都有其適合的場景

而Node.Js採用Google V8 engine,其強大的效能在許多中小型場景下都足以輕鬆應付。
效能面有Google大神當靠山,只要定期更新自己的Node.Js版本,基本上只需要留意自己的業務邏輯是否寫的太差,且配合TypeScript,不必太煩心語言面的問題。

Node.Js的作者已重新打造一套deno,明顯就是要取代Node.Js。雖然現在還處於早期開發階段,無法直接使用。
但此組合已全面使用TypeScript,只需要靜待deno使用量越來越大、其相應框架都成熟後,再跳過去就行。短時間要淘汰掉Node.Js也是不太可能。

Nest.Js相似java/spring,其學習經驗亦能幫助並迅速上手java/spring。在就業機會上,此選擇相當地多。可避免職涯路線窄化!

最後小小總結一下優缺點:

優點

  1. 前後端結構幾近一致,開發體驗舒適。不熟悉的部份在其中一端學會了,通常另一端可以依樣畫葫蘆
  2. 框架原生且全面採用RxJs
  3. 框架原生且全面採用TypeScript
  4. 邏輯拆分清晰明確
  5. Nest.Js相似java/Spring,在未來職涯轉換上多一個選擇
  6. 若deno已成熟穩定且幾近取代Node.Js,轉換陣痛期低

缺點

  1. Nest.Js文件省略許多,對於後端經驗不熟悉者會難以快速掌握
  2. Angular對於初學者來說,難以短時間快速上手。但仍值得花心力學習,其所學到的精神相當受用
  3. Nest.Js不像egg.Js框架直接內置多核心使用。但以Side project來說,Node.Js本身效能應足以應付。若有需要,仍可配合PM2等套件來做到。