在個人網站、技術博客或文檔頁面中嵌入程式碼,希望擁有:語法高亮、行號、複製按鈕、主題切換、語言自動檢測等專業 IDE 風格效果。
| 方案 | 特點 | 適用場景 |
|---|---|---|
| Prism.js | 輕量 (2KB gzip)、模組化、插件豐富、無依賴 | 靜態站點、文檔、博客首選 |
| Highlight.js | 自動檢測語言、190+ 語言、主題多、CDN 友好 | 動態內容、Markdown 渲染管道 |
| Shiki | 用 TextMate 語法、完美還原 VS Code 高亮、支援雙主題 | 追求極致顯示效果、構建時編譯 |
| CodeMirror / Monaco Editor | 編輯器級、支援編輯、補全、Lint | 在線 IDE、代碼編輯器嵌入 |
<!-- 1. 引入 CSS (選擇主題) -->
<link href="https://cdn.jsdelivr.net/npm/prismjs@1.29.0/themes/prism-tomorrow.min.css" rel="stylesheet" />
<!-- 2. HTML 結構 -->
<pre class="line-numbers"><code class="language-javascript">// 你的代碼
function hello() {
console.log('Hello, World!');
}
</code></pre>
<!-- 3. 引入核心 JS + 常用插件 -->
<script src="https://cdn.jsdelivr.net/npm/prismjs@1.29.0/components/prism-core.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/prismjs@1.29.0/plugins/autoloader/prism-autoloader.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/prismjs@1.29.0/plugins/line-numbers/prism-line-numbers.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/prismjs@1.29.0/plugins/toolbar/prism-toolbar.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/prismjs@1.29.0/plugins/copy-to-clipboard/prism-copy-to-clipboard.min.js"></script>
若使用 marked 或 markdown-it 渲染 Markdown,配合高亮庫:
// marked + Prism.js
const marked = require('marked');
const Prism = require('prismjs');
const loadLanguages = require('prismjs/components/');
loadLanguages(['javascript', 'python', 'java', 'cpp']);
marked.setOptions({
highlight: (code, lang) => {
if (Prism.languages[lang]) {
return Prism.highlight(code, Prism.languages[lang], lang);
}
return code; // 無對應語言直接返回
}
});
prism-autoloader 或 Shiki 的 getHighlighter 按需編譯,減小體積。line-numbers + copy-to-clipboard 一鍵搞定。推薦:個人博客用 Prism.js + Autoloader 最省心;文檔站/靜態生成器 (VitePress, Next.js) 直接用 Shiki 構建時編譯,零運行時開銷、效果最像 VS Code。