Sails.js 的一些問題及現況

  1. 1. TL;DR - 不負責任懶人包
  2. 2. 長篇抱怨文
  3. 3. 相關網址
  4. 4. Trails.js 介紹影片
  5. 5. 自肥區

banner

本來標題想寫「Sails.js 算不算死了」,不過這樣似乎太過分了,這篇主要是講講之前用它來開發的感受。

TL;DR - 不負責任懶人包

Sails.js 主要維護者 mikermcneil 與其中一位成員 tjwebb 有「理念上的問題」,導致開發停滯了超過半年之久,之後後者離開另外建立了 Trails.js,而 Sails.js 在今年繼續維護。

長篇抱怨文

去年的時候,Sails.js 的版本停在 0.12.0-rcX(忘記哪個號碼)超過半年之久;在這段期間,issue 上面的回應也零零落落的,而我那時才知道,開發團隊其實有養一隻 GitHub robot,太久沒回應的 issue 會強制關掉,這到是讓我感到不滿。

當初 Node.js 入門時是從 Express.js 開始的,也很習慣從這樣一個基礎的 framework 再自己安裝其他 plugin 兜成自己需要的東西,但每建一個新的專案就要重新兜一次,久了其實也挺煩的,當時也不知道 Yeoman 這種工具。

後來試了 Kraken.js 以及 Sails.js 這兩個比較屬於包山包海的 framework,而且都是以 Express.js 為基底再包上一層,在使用一段時間後卻覺得這反而讓我更加麻煩,表面上似乎是幫你解決了一些雜事,反之要面對的卻是一長串看似方便其實很亂的 config 參數。

當時用了 Kraken 1.x 的版本,就像是包上了一層薄薄的蝦殼,薄到讓我覺得多包這一層沒什麼太大的意義,原本 middleware 的載入方式改成透過 config 反而變得很難用,加上當時在折騰 Socket.IO,而 Kraken.js 並沒有往這方面做進一步整合,導致不論是在 Express.js 或是 Kraken.js 裡加上 Socket.IO 的方式是差不多的,但後者還得多繞一點彎路,本末倒置。

Sails.js 有將之另外整合,並打包成了 sails.io.js,相比之下方便不少,所以最後採用它來寫了幾個專案,但一段時間後也開始有了一些怨氣,一個是預設作為自動化排程的 Grunt 非常難用,相關設定又臭又長而且不盡相同,我曾為了某個 plugin 設定搞不定而折騰很長一段時間,最後卻是參考其他不相關的 plugin 的設定方式照著改過去才成功。

另一方面是作為核心的 Express.js 的版本問題,Kraken.js 因為有 PayPal 罩著,所以遷移到 Express 4.x 的速度很快,但 Sails.js 就不是這麼一回事了,官方一直停在 3.x 版,開發又停滯了一段時間,使得以 Express.js 為主的 plugin 也得限制版本號才能使用,本來這不是什麼大問題,因為當時連 Node.js 的更新也很緩慢,也是在 0.12 上卡了很長一段時間,後來在用 Sails.js 寫最後一個專案時,Node.js 突然直接跳到了 4 版,不久 5 版也跟著推出了。這下感受就大不同了(還是可以動,主要是奇蒙子問題),那時也才開始在意 Sails.js 停滯很長一段時間這件事;在這段時間裡,也造成一些 issue 因為沒有後續回應的關係而被官方的 bot 自動關掉,最後決定趁著專案的開發時間還不算久的情況下,直接改用 Koa.js 重新開發,不再碰 Sails.js

在遷移一陣子之後,發現了 Trails.js 的存在,這是 Sails.js 的其中一個成員離開之後建立的專案,看裡面的專案數量,似乎是以 Koa.jsExpress.jsHapi.js 等各個基礎 framework 為底,再分別客製打包而成,在安裝時就可以選自己順手的為底來往上建立,選擇上比較靈活,但官方維護的心力應該也多了不少,目前還在 1.0 alpha,能不能取代 Sails.js 還得再觀察。

相關網址

Trails.js 介紹影片

自肥區

我把在使用 Koa.js 這段期間用到的 plugins 以自己覺得合適的架構打包,並用 Yeoman 來做自動化安裝,不過目前只有做將整個專案架構複製到自己的資料夾裡這件事而已,更多客製化的方式還得研究研究,另外之後會先把 plugins 刪掉一大部分,並將 Gulp.js 改成單純的用 npm script 來自動化管理專案,等這些基本問題弄好後,再把其他 plugins 加回去。