跳至主要内容

更新:部落格網站產生器

· 閱讀時間約 3 分鐘

前幾天在調整部落格時,有幾個痛點一直放著沒動,想說乾脆趁這個機會改一改。


痛點一

在生成器出現之前,我編輯的檔案跟最後部署的檔案是同一份,所以編輯時都是用 browser-sync 套件來預覽,只要按下儲存,網頁就會自動更新。

但是在生成器出現之後,如果我想要預覽新文章,就只能選這兩種方法:

  1. 每次想要預覽就只要重新 build 整個網站。
  2. 暫時在 index.htmlpreview.html 寫新文章,等編輯到滿意之後再放到真正的文章檔案,然後再重新 build 一次。

其實使用方法二也沒有多不方便,就是有點繞路而已。

解法

  • 新增 watch.php,監聽 content/articlestemplates 目錄變動,自動觸發 build。
  • 接著再整合 browser-sync,只要有變動,就同步到瀏覽器上。

痛點二

生成器在執行 build 的時候,會把所有文章都重新生成一次,久了會導致 browser-sync 變得緩慢,而且還「沒有刪除功能」,需要自己檢查有沒有殘留的頁面。

解法

這個老實說應該要分開做,正常來說應該是:

  1. build 是正式環境要用的,應該刪除整個資料夾,然後全部重新建構一次,這樣最安全。
  2. dev 是當下預覽用的,第一次啟動要全部 build 一遍,接下來則是根據有變動的檔案去 build 就好。

但我為求簡單,把它整合到一起了,而且 build 的時間基本上只有 0.1 秒,體感上幾乎感受不到。

  • 新增 Smart Write 機制,僅在檔案內容變動時才寫入,避免不必要的 I/O。
  • 新增 cleanStaleFiles(),自動清理多餘的分頁資料夾與文章資料夾(透過 slug 比對)。
  • 新增 summary(),建置完成後顯示更新的檔案列表。

這樣的話,每次 build 雖然會掃過所有文章,但如果只有修改內文,實際上只會生成:

  1. 首頁(或分頁)的文章內容
  2. 文章檔案(含資料夾)
  3. search.json
  4. rss.xml

痛點三

RSS 的 lastBuildDate 欄位每次 build 都會改成最後建置時間,但其實 RSS 內容完全沒變的時候是不需要上版的。

解法

  • RSS 的 lastBuildDate 改為最新文章發布日期,避免每次 build 的時候都變動。

新的發文流程

  • 點兩下 new-article.bat,建立新文章模板,並且自動填入今天日期。
  • 點兩下 auto-sync.bat,自動打開 browser-syncwatch.php,編輯儲存的時候會同步顯示到瀏覽器上。
  • (Optional)保險一點,自己再 build 一次。
  • 最後直接 commit + push 就行了。