Ghost CMS 程式碼語法高亮完整教學:Prism.js 整合指南

學習如何在 Ghost CMS 加入語法高亮功能,透過 Code Injection 或主題整合兩種方式實作 Prism.js,並善用複製按鈕、行號等進階插件。

分享
Ghost CMS 程式碼語法高亮完整教學:Prism.js 整合指南
Photo by Jakub Żerdzicki on Unsplash

在技術部落格或開發者網站中,程式碼片段的呈現品質直接影響讀者體驗。Ghost CMS 提供了兩種主流方式實作語法高亮:透過 Code Injection 快速整合,或深度整合到主題檔案中。本文帶你完整了解兩種方法,並介紹 Prism.js 的進階插件功能。

在 Ghost 編輯器中建立程式碼區塊

Ghost 編輯器原生支援 Markdown 語法,只需用三個反引號加上語言名稱,即可標記程式碼區塊:

```javascript
const greet = (name) => `Hello, ${name}!`;
console.log(greet('Ghost'));
```

支援的語言涵蓋 JavaScript、Python、PHP、CSS、HTML、Bash 等常見語言。不過,Ghost 預設不會對程式碼上色,需要額外整合語法高亮函式庫。

方法一:透過 Code Injection 整合 Prism.js(推薦新手)

這是最快速的方式,不需要修改主題檔案,換主題也不會遺失設定。

步驟 1:選擇 Prism 主題樣式

前往 Prism 官網選擇配色主題(如 Tomorrow Night、Okaidia),並複製 CDN 連結。

步驟 2:加入 Ghost Code Injection

進入 Ghost 後台 → Settings → Code Injection,在 Site Header 加入 CSS:

<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/themes/prism-tomorrow.min.css">

Site Footer 加入 JavaScript:

<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/prism.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/plugins/autoloader/prism-autoloader.min.js"></script>

使用 autoloader 插件可以自動按需載入語言支援,不必手動加入每個語言的腳本。

方法二:整合 Prism.js 到主題檔案(推薦進階用戶)

將 Prism 直接打包進主題,可以減少外部請求、控制版本,並搭配 npm 工作流程管理。

步驟 1:下載 Prism 檔案

npm install prismjs

步驟 2:複製到主題目錄

your-theme/
├── assets/
│   ├── css/
│   │   └── prism.css       ← 放語法高亮樣式
│   └── js/
│       └── lib/
│           └── prism.js    ← 放 JS 函式庫

步驟 3:在主題模板中引用

default.hbs<head> 加入:

<link rel="stylesheet" href="{{asset "css/prism.css"}}">

</body> 前加入:

<script src="{{asset "js/lib/prism.js"}}"></script>

Prism.js 進階插件

Prism 提供豐富的插件庫,以下是最實用的幾個:

插件名稱功能適用場景
line-numbers顯示行號教學文章、多行程式碼
copy-to-clipboard複製按鈕提升讀者體驗
line-highlight高亮特定行強調重點程式碼
toolbar頂部工具列搭配其他插件使用
diff-highlight顯示程式碼差異版本比較文章

啟用複製按鈕範例

<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/plugins/toolbar/prism-toolbar.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/plugins/copy-to-clipboard/prism-copy-to-clipboard.min.js"></script>

FAQ

Code Injection 和整合到主題有什麼差別?

Code Injection 快速方便,換主題不影響設定;整合到主題效能較好,但換主題需重新設定。對大多數部落格來說,Code Injection 已足夠。

為什麼加了 Prism 卻沒有上色?

最常見原因是程式碼區塊缺少語言標記。確認 Markdown 的反引號後方有加語言名稱,例如 ```python 而非單純的 ```

可以在 Ghost 使用其他語法高亮庫嗎?

可以,Highlight.js 是另一個熱門選擇,設定方式相同。Prism 的優勢在於插件生態更豐富、效能更輕量。

語法高亮會影響網站速度嗎?

透過 CDN 載入影響極小。若要進一步優化,可使用 autoloader 按需載入,或整合到主題後以 webpack 打包。

結語

在 Ghost 中加入語法高亮並不複雜——對於大多數部落格,Code Injection 加上 Prism CDN 就能搞定。如果你重視效能和完整控制,則值得花時間整合到主題檔案中。無論哪種方式,讀者看到清晰有色彩的程式碼,閱讀體驗都會大幅提升。

Read more

Gaze Guard 短影片旁白的 TTS 成本與隱私防護示意圖

短影片旁白的成本,其實比我想像低

我最近在做一支 Gaze Guard 的 20 秒產品介紹影片。 原本想說簡單做個動畫就好。 後來想說如果有配音,會感覺比較生動也比較能夠描述使用的情境和達成的效果。 這次我測了什麼 我測的是產品介紹影片用的英文旁白。 工具底層使用的是 Edge TTS,也就是 Microsoft Edge 的線上 Text-to-Speech 服務。常見的底層工具是 edge-tts。 這不是正式 Azure Speech API 的計費路徑。 在我這次的環境裡,它沒有要求 API key,也沒有回傳可見的 per-use billing。 所以這次測試本身,比較像是快速 prototype。 如果未來要正式商用、穩定大量產出,就要回頭看 Azure Speech、OpenAI TTS、ElevenLabs 這類正式付費方案。

By SteepingLogic
用 Cloudflare Tunnel,從外面連回本機 Hermes Dashboard

用 Cloudflare Tunnel,從外面連回本機 Hermes Dashboard

# 用 Cloudflare Tunnel,從外面連回本機 Hermes Dashboard 我有一台 local Hermes。 平常它就在自己的機器上跑。 可能是家裡的桌機。 可能是 NAS。 可能是一台一直開著的 Linux box。 也可能只是我自己的筆電。 問題是,人一離開那個網路,Hermes dashboard 就變成一個只存在於 localhost 的東西。 我想在外面打開它。 但我沒有 static IP。 沒有買網域。 也不想進路由器開 port forwarding。 因為那條路通常長這樣: * 找 public IP * 設定 NAT * 開 port * 處理防火牆 * 補 HTTPS * 設定憑證 * 再擔心 origin IP 被掃 非常友善。 所以這篇先走另一條路:

By SteepingLogic
Invoshot 開發日記|正向回饋

Invoshot 開發日記|正向回饋

想信很多人在開發的時候都常常會做一件事,那就是: 不斷地反覆思考,在腦袋內把流程跑過很多次,然後思考哪裡可以做得更好 不限坐在電腦前的時後,可能是在捷運上,在人行道上, 在馬桶上或是在洗澡的時候 🤪 我不斷地在想:AI 辨識完一張發票後,使用者接下來最需要的是什麼? 每個欄位都要核對嗎? 這麼多欄位真的不會漏看嗎? 所以我在 Invoshot 裡加了提醒功能。 辨識結果出來後,系統會把比較需要注意的地方標出來。 不是把所有不確定都丟給使用者,而是把他真正需要介入的那幾秒鐘留出來。 今天收到一則訊息: 今天用了有新增提醒功能很棒! 真的有變輕鬆 😎 看到這句的時候,我第一個想到的是: 原來那些只是我腦內風暴的優化項目,使用者是真的可以感受到差異的! 感覺又有動力了!

By SteepingLogic