一條 markdown 管線:後台預覽與前台渲染禁止分家
筆記用 markdown 寫,渲染發生在兩個地方:公開前台的文章頁、後台編輯器的即時預覽。這裡有一條我立得很早的紅線:全站只准有一條 markdown 管線。
為什麼這麼嚴
兩套實作的漂移是漸進且不可逆的:前台升級了語法高亮、後台忘了;後台的 wikilink 樣式調了、前台沒跟。三個月後「預覽」與「發佈後長相」是兩個世界,所見即所得變成所見即所騙。
所以後台預覽直接 import 前台的渲染函式——同一個 markdown-it 實例、同一組 plugin、同一份輸出。前台管線動了什麼,預覽當下就長什麼樣,零同步成本。
管線裡的自製零件
- wikilink plugin——
[[slug]]與[[slug|顯示文字]]解析成站內連結;指向未發佈筆記的連結渲染成「未發芽」的降色樣式(連結存在、目標還沒長出來,在花園語境裡這是合法狀態,不是壞連結)。 - 標題錨點——h2/h3 自動生成 id,給筆記頁的目錄用。中文標題保留原文當錨點、重複標題加序號後綴。
- 程式碼區塊——語法高亮只載入核心語言(bundle 節食),fence 支援檔名慣例(
```ts [file.ts])。
安全邊界
markdown-it 設 html: false——原始 HTML 一律不放行,所有輸出都經過 renderer 生成。這個站的內容雖然只有我自己寫,但「渲染管線天生防 XSS」跟「渲染管線信任作者」是兩種體質,未來若開放留言或多人協作,體質好的管線不需要重新體檢。
讀到這裡若有一點收穫,替這顆種子澆一次水——匿名、一人一次。
⇄ 被這些筆記引用