更新:部落格網站產生器
· 閱讀時間約 3 分鐘
前幾天在調整部落格時,有幾個痛點一直放著沒動,想說乾脆趁這個機會改一改。
痛點一
在生成器出現之前,我編輯的檔案跟最後部署的檔案是同一份,所以編輯時都是用 browser-sync 套件來預覽,只要按下儲存,網頁就會自動更新。
但是在生成器出現之後,如果我想要預覽新文章,就只能選這兩種方法:
- 每次想要預覽就只要重新 build 整個網站。
- 暫時在
index.html或preview.html寫新文章,等編輯到滿意之後再放到真正的文章檔案,然後再重新 build 一次。
其實使用方法二也沒有多不方便,就是有點繞路而已。
解法
- 新增
watch.php,監聽content/articles與templates目錄變動,自動觸發 build。 - 接著再整合
browser-sync,只要有變動,就同步到瀏覽器上。
痛點二
生成器在執行 build 的時候,會把所有文章都重新生成一次,久了會導致 browser-sync 變得緩慢,而且還「沒有刪除功能」,需要自己檢查有沒有殘留的頁面。
解法
這個老實說應該要分開做,正常來說應該是:
- build 是正式環境要用的,應該刪除整個資料夾,然後全部重新建構一次,這樣最安全。
- dev 是當下預覽用的,第一次啟動要全部 build 一遍,接下來則是根據有變動的檔案去 build 就好。
但我為求簡單,把它整合到一起了,而且 build 的時間基本上只有 0.1 秒,體感上幾乎感受不到。
- 新增 Smart Write 機制,僅在檔案內容變動時才寫入,避免不必要的 I/O。
- 新增 cleanStaleFiles(),自動清理多餘的分頁資料夾與文章資料夾(透過 slug 比對)。
- 新增 summary(),建置完成後顯示更新的檔案列表。
這樣的話,每次 build 雖然會掃過所有文章,但如果只有修改內文,實際上只會生成:
- 首頁(或分頁)的文章內容
- 文章檔案(含資料夾)
search.jsonrss.xml
痛點三
RSS 的 lastBuildDate 欄位每次 build 都會改成最後建置時間,但其實 RSS 內容完全沒變的時候是不需要上版的。
解法
- RSS 的
lastBuildDate改為最新文章發布日期,避免每次 build 的時候都變動。
新的發文流程
- 點兩下
new-article.bat,建立新文章模板,並且自動填入今天日期。 - 點兩下
auto-sync.bat,自動打開browser-sync跟watch.php,編輯儲存的時候會同步顯示到瀏覽器上。 - (Optional)保險一點,自己再 build 一次。
- 最後直接 commit + push 就行了。