[Docusaurus] 自訂你的 Docusaurus
docs 分版
若要把 docs 內部的文件分成兩個以上的 page,需要手動設定 sidebar.ts:
const sidebars: SidebarsConfig = {
notes: [
{
type: 'category',
label: '筆記',
link: {
type: 'doc',
id: 'notes/index', // 對應 /docs/notes/index.mdx
},
items: [
{
type: 'autogenerated',
dirName: 'notes',
},
],
},
],
series: [
{
type: 'category',
label: '系列文章',
link: {
type: 'doc',
id: 'series/index', // 對應 /docs/series/index.mdx
},
items: [
{
type: 'autogenerated',
dirName: 'series',
},
],
},
],
};
接下來至 docusaurus.config.js
的 presets 與 themeConfig 做相對應設定即可。
新增網頁搜索
大部人比較喜歡使用 algolia,但我個人沒有到很愛用它,所以我是換成 @easyops-cn/docusaurus-search-local。
- 先安裝插件
npm install --save @easyops-cn/docusaurus-search-local
- 前往 docusaurus.config.js 添加下列內容:
const config = {
themes: [
[
"@easyops-cn/docusaurus-search-local",
{
hashed: true,
language: ["en", "zh"],
highlightSearchTermsOnTargetPage: true,
explicitSearchResultPath: true,
},
],
],
}
npm run build
即可搜索。
Mermaid 圖表
基本上 Docusaurus 是個支援使用 markdown 產生網頁內容的框架,了不起最多支援 MDX。所以想在 MD 或 MDX 裡使用圖表會需要額外支援,Mermaid 就是一個好選擇。
- 先安裝
@docusaurus/theme-mermaid
npm install --save @docusaurus/theme-mermaid
- 設定
docusaurus.config.ts
export default {
markdown: {
mermaid: true,
},
themes: ['@docusaurus/theme-mermaid'],
};
安裝 VScode Mermaid 插件輔助開發。
Code Block
Docusaurus 的 code block 其實預設只支援部分語言,對於像 C# 等 docusaurus 本身沒預設的語言,寫在 code block 裡會因為 docusaurus 不知道它是誰而無法正確高亮顯示。
要在 docusaurus 中擴充 code block 支援特定語言可以參考 prismjs 程式碼區塊支援語言表,然後在 docusaurus.config.js
的 themeConfig 中新增 prism 設定:
prism: {
theme: prismThemes.github,
darkTheme: prismThemes.dracula,
additionalLanguages: ['csharp', 'dart', 'powershell', 'scss']
}
Google Analytics
- 先安裝
@docusaurus/plugin-google-gtag
。但如果是使用 classic preset 的話,可以直接跳 2.。
npm install --save @docusaurus/plugin-google-gtag
- 去 Google Analytics 申辦一個評估 ID。
- 在 presets 設定中新增 gtag 設定:
gtag: {
trackingID: 'G-XXXXXXXXXX', // 這是你的 Google Analytics 評估 ID
anonymizeIP: true,
}
giscus 留言板
我在 2025 更新新版部落格後將留言板移除了,理由如下:
- 留言板的使用率很低,幾乎沒有留言。
- giscus 其實有一種傳統網頁的美...
giscus 的優點是可以在 GitHub 統一管理留言,而且免費無廣告!但對應的缺點是要留言要登入 GitHub 帳號。
-
先照 giscus 文件上說的檢查:
- repo 是否已公開。
- 是否已在 GitHub 安裝 giscus 應用程式。
- repo 是否已啟用 Discussions 功能。
-
回到 giscus 文件,填入自己 repo 的網址,giscus 會檢查是否滿足上述的條件,都滿足就會開放功能給予選取,之後會自動產生一段 code,大致像這樣:
<script src="https://giscus.app/client.js"
data-repo="[在此輸入儲存庫名稱]"
data-repo-id="[在此輸入儲存庫 ID]"
data-category="[在此輸入分類名稱]"
data-category-id="[在此輸入分類 ID]"
data-mapping="pathname"
data-strict="0"
data-reactions-enabled="1"
data-emit-metadata="0"
data-input-position="bottom"
data-theme="preferred_color_scheme"
data-lang="zh-TW"
crossorigin="anonymous"
async>
</script>
上面的在此輸入...
不用真的輸入,在填完 repo 網址後,giscus 會自己產生對應內容。
- 回到專案,先安裝
giscus/react
套件:
npm i @giscus/react
- 在 components 資料下中新增 comment 資料夾,建立
index.js
檔案:
import Giscus from "@giscus/react";
export default function Comment(){
return(
<div style={{paddingTop: 50}}>
<Giscus
id="comments"
repo="[在此輸入儲存庫名稱]"
repoId="[在此輸入儲存庫 ID]"
category="Announcements"
categoryId="[在此輸入分類 ID]"
mapping="pathname"
reactionsEnabled="1"
emitMetadata="0"
inputPosition="bottom"
theme="light"
lang="zh-TW"
loading="lazy"
/>
</div>
)
}
在部落格文章下添加留言板
- 以指令在
/src/theme
底下產生 BlogPostItem 資料夾。
npm run swizzle @docusaurus/theme-classic BlogPostItem -- --wrap
- 將 BlogPostItem 的
index.js
更改如下:
import React from 'react';
import BlogPostItem from '@theme-original/BlogPostItem';
import Comment from '../../components/comment';
export default function BlogPostItemWrapper(props) {
return (
<>
<BlogPostItem {...props} />
<Comment/>
</>
);
}
在 docs 文章下添加留言板
- 以指令在
/src/theme
底下產生DocItem
資料夾跟Layout
資料夾。
npm run swizzle @docusaurus/theme-classic DocItem/Layout -- --wrap
- 將 /DocItem/Layout 的
index.js
更改如下:
import React from 'react';
import Layout from '@theme-original/DocItem/Layout';
import Comment from '../../../components/comment';
export default function LayoutWrapper(props) {
return (
<>
<Layout {...props} />
<Comment />
</>
);
}