Skip to main content

Command Palette

Search for a command to run...

惡補一下 JS 的 Library 跟 Framework

Updated
3 min read
惡補一下 JS 的 Library 跟 Framework

這兩年都用 Elixir + Phoenix + LiveView 在開發網站,遠離雜亂的 js 生態圈。最近剛好因為有相關需求,所以就大概看一下有哪些沒見過的 Library 跟 Framework,有興趣的就大概摸一下,寫個粗淺的心得

為了這篇文章寫了三種 TodoMVC 組合供參考

前端

Svelte

其實在轉用 Elixir 之前就用過 Svelte 寫過一兩個 side project;沒記錯的話,那時因為適逢 Vue 從 2 到 3 過渡期,就連 Nuxt.js 這 Vue 的最大推手也遲遲未有升級支援,而 React Hooks 帶來的開發體驗對我來說並沒有好多少,對於這兩大生態圈感到疲勞,所以就跳到 Svelte 去了

優點
  • 同樣的功能,Svelte 可以用少量的程式碼實現,沒有太多冗餘的 function

  • 從 jQuery 轉到這些前端大坑後,Svelte 是少數有帶給我所謂的「良好的開發體驗」的;上一個是 Elm,可惜他死透了

  • 使用 js library 大多不需要像 React 那樣繞來繞去,或是得找額外打包好的 xxx-react 套件,直接使用即可,所以不存在什麼「生態圈太小」的說法

  • 我再也不想寫 jsx 了

🤌
缺點
  • 數據綁定方面用了很多語法糖,compiler 做掉了很多東西,所以初次使用在這方面會需要一點「想像力」。說實話,這連缺點也算不上
💡
延伸閱讀

Astro

優點
  • 由於框架特性,我可以把不需要 js 的 components 寫成 astro 檔,剩下的檔案就幾乎是確定需要 js 邏輯操作、動態渲染的部分了,方便重點關注

  • 除了產生一般的靜態 html 外,還可以打包成 middleware 給 Express、Fastify 或線上 server 做 SSR 用,十分聰明的做法

  • 你學 React 就需要碰 Next,學 Vue 就需要接觸 Nuxt;基於上一條特性,不管你想學 React、Vue 還是 Svelte,你都可以先忽略那些專屬的 SSR framework,直接套到 Astro 上就行,降低學新東西或技術選擇時「要換就得全換」的門檻

  • 大多數網站沒有 SPA 的必要,用 MPA 還能省掉頁面切換時可能要另外寫重設 state 數值的部分,讓邏輯更單純

🤌
缺點
  • Astro 可以包其他 framework 的檔案,但不能反包 astro 檔,雖然可以繞點遠路,但還是稍嫌可惜
💡
延伸閱讀

全端

首先給下面要介紹的東西先做個資訊補充,除了前端 framework 是吃後端的 json 再更新部分 html 外,也有一種是讓後端直接生成部分 html 丟給瀏覽器做局部更新的;好處是前端需要寫的 js 極少,甚至可以直接讓後端處理 form validate,不需要 js 做一次,後端再做一次

舉凡 Laravel 的 Livewire、RoR 的 Hotwire、Phoenix 的 LiveView 都是此類

htmx

優點
  • 如果你使用的後端 framework 沒有像上述選項有自家的高度整合方案(如 Django、Express),htmx 會是一個很好的通用方案
🤌
缺點
  • 由於參數遍佈 html,所以功能複雜的頁面在維護上可能會有反效果

  • 自帶的 Events 有點雜

💡
延伸閱讀

Alpine

這是由 Livewire 作者所開發的,用来補足不需要與後端互動的部分

優點
  • 參數量極少,能夠快速上手

  • 與後端溝通的部分由 htmx、LiveView 這些負責,剩下瑣碎的前端互動可由 Alpine 代勞,兩者結合之後,幾乎不用寫到什麼 js

💡
延伸閱讀

後端

Nest.js

優點
  • Decorator 的運用很漂亮,程式碼看起來很清晰
🤌
缺點
  • 跟 Express、Koa 一樣屬於輕量型的 framework,對於專案結構沒有太嚴格的規劃。若不定義好結構容易跟以前一樣程式碼越多架構越亂

  • 因為是包 Express/Fastify 的關係,所以出錯時可能還要釐清一下是哪邊的問題

  • 不理解為什麼需要包 RxJS?

💬
備註
  • 若要使用的話,我會傾向於把核心從 Express 換成 Fastify,除了 Express 現在是養老狀態以外,Fastify 對 template engine 的參數設定的整合也比較好

    Express 就沒法像這樣寫

  • 如今大部分的 template engine 都沒在更新或是僅有維護了,雖然應該也沒人在用了

  • Nest.js 給我一種「如果 Express 用 TypeScript 重寫會是什麼樣?」為出發點的感覺

Adonis.js

這個 framework 初衷是讓 PHP 用戶方便轉移到 Node,所以大量參考了 Laravel 的結構

優點
🤌
缺點
  • 或許是客群取向關係,純 js 開發者的關注度不算高
💬
備註

More from this blog

Steam Deck OLED 小主機調教記錄

看了國外一些用 Steam Deck 拿來當小主機用的影片感覺很心動,去年底 OLED 版推出時想把他拿來代替我的 Macbook Pro,原本是用 MBP 外接螢幕上下看,但除了前端開發外,其實很少用到 mac 螢幕,加上換了比較大的主螢幕後需求更低了,而且同時使用也會佔桌面前後空間 當然我知道一般人都是筆電蓋起來放旁邊當個小主機用,我以前有接雙螢幕時會這樣做,但因為雙螢幕需要時常轉頭傷到脖子後就放棄了 https://www.youtube.com/watch?v=tH_aHZQqTqI ...

Feb 13, 20244 min read86
Steam Deck OLED 小主機調教記錄

這幾年使用 Linux 當一般作業系統的感受

上圖是我的 Linux 現在的樣子: 發行版:Manjaro Linux 桌面環境:KDE 5 Plasma 佈景:Maia Theme Linux 在我大學期間就開始嘗試拿來作為一般的作業系統使用,但那段期間其實一直都在 Windows 跟 Linux 之間切換(你知道的,遊戲),後來這兩年開始固定用 Linux,工作時用 Mac,基本上已經沒怎麼碰 Windows 了。 當然,這個過程並沒有讓我成為什麼 Linux 大師,我也沒有這個打算,只是嘗試能在日常生活中使用而已。前一陣子看到這篇...

Jul 7, 20163 min read79
這幾年使用 Linux 當一般作業系統的感受
K

Knovour's Notes

6 posts