Theme
vitepress 总结
前言
本文仅对使用过程中出现的问题进行总结,VitePress 使用方法请参考 VitePress 官方文档 和 快速上手中文教程。
安装向导
建议选择在./docs中搭建VitePress项目,生成的文件结构应该是这样的
sh
┌ Welcome to VitePress!
│
◇ Where should VitePress initialize the config?
│ ./docs
│
◇ Where should VitePress look for your markdown files?
│ ./docs
│
◇ Site title:
│ My Awesome Project
│
◇ Site description:
│ A VitePress Site
│
◇ Theme:
│ Default Theme
│
◇ Use TypeScript for config and theme files?
│ Yes
│
◇ Add VitePress npm scripts to package.json?
│ Yes
│
◇ Add a prefix for VitePress npm scripts?
│ Yes
│
◇ Prefix for VitePress npm scripts:
│ docs
│
└ Done! Now run pnpm run docs:dev and start writing.Git忽略项
添加.gitignore文件,主要用于上传到gitee/github时,忽略这些文件不上传, 在cmd中运行以下命令:
sh
echo node_modules >> .gitignore
echo cache >> .gitignore
echo dist >> .gitignore文件结构
请按以下文件结构组织
sh
.
├─ docs/
│ ├─ .vitepress
│ │ ├─ config.mts # 配置文件
│ │ ├─ theme/ # 主题相关
│ │ │ ├─ index.ts # 加载css、js、页面等设定
│ │ │ └─ style/ # 主题样式目录
│ │ │ ├─ index.css # 只导入css样式文件
│ │ │ ├─ var.css # css变量相关定义(添加到index.css中)
│ │ │ ├─ *.css # 其它css样式文件(添加到index.css中)
│ │ │ └─ code.css # 代码块样式定义(添加到index.css中)
│ │ ├─ config/ # 分拆config.mts文件
│ │ │ ├─ markdown.ts # Markdown 配置 (添加到config.mts中)
│ │ │ └─ theme.ts # 主题配置文件(添加到config.mts中)
│ │ ├─ plugins/ # 插件目录
│ │ └─ utils/ # 工具函数目录
│ ├─ post/ # 存放md文章目录
│ ├─ public/ # 存放公共静态资源的目录
│ ├─ cache/ # 运行时缓存(不上传Github)
│ ├─ dist/ # build生成的静态网站(不上传Github)
│ └─ index.md # 首页md文档
├─ node_modules/ # 依赖包(不上传Github)
├─ package-lock.json # 项目依赖包配置文件
└─ package.json # VitePress配置除了
post目录下的子目录和文件外,所有其他文件名都必须是小写
浅色主题, 暗色代码块
markdown的代码高亮主题强制设为暗色
ts
markdown: {
// 强制指定一个暗色主题,例如 'vitesse-dark', 'github-dark', 'one-dark-pro'
theme: "one-dark-pro",
config: (md) => {
// 换行:支持单回车换行 (Breaks)
md.set({ breaks: true });
}
}- 修改
css样式
css
:root, .dark {
/* 代码块背景色 */
--vp-code-block-bg: var(--slate-800);
/* 还需修改其他样式变量 */
}⚠️单回车换行 (Breaks)
ts
markdown: {
// 强制指定一个暗色主题,例如 'vitesse-dark', 'github-dark', 'one-dark-pro'
theme: "one-dark-pro",
config: (md) => {
// 换行:支持单回车换行 (Breaks)
md.set({ breaks: true });
}
}⚠️EdgeOne部署失败
本地build通过,但是部署到EdgeOne时通不过
- 查看部署日志
- 检查文件夹名和文件名的大小写、特别是md文件的图片资源文件名,因为在
windows下不区分大小写,而EdgeOne是区分大小写的。
md文件对应不同字体
- 读取文件名或
frontmatter中的语言,注入到html的lang属性中
ts
export default {
extends: DefaultTheme,
// --- 新增 setup 函数处理字体逻辑 ---
setup() {
const { frontmatter, page } = useData()
const updateLangClass = () => {
if (typeof window === 'undefined') return
const htmlEl = document.documentElement
// 逻辑:优先看 frontmatter 里的 lang,
// 如果没有,则判断文件名是否包含 -jp 或 -ja (对应你的 daq3-manual-jp.md)
const fmLang = frontmatter.value.lang
const fileName = page.value.relativePath
htmlEl.classList.remove('lang-zh', 'lang-ja')
if (fmLang?.includes('ja') || fmLang?.includes('jp') || fileName.includes('-jp') || fileName.includes('-ja')) {
htmlEl.classList.add('lang-ja')
htmlEl.lang = 'ja-JP'
} else {
htmlEl.classList.add('lang-zh')
htmlEl.lang = 'zh-CN'
}
}
onMounted(updateLangClass)
// 监听路由变化,确保切换页面时字体同步更新
watch(() => page.value.relativePath, updateLangClass)
},
} satisfies Theme- 分别对中文和日文设置不同的字体
css
/* 英文或中文字体 */
:root {
--vp-font-family-base: 'Inter4CJK', -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif;
--vp-font-family-mono: 'JetBrains Mono', ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace;
}
/* 日文字体 */
[lang]:where(:lang(ja)) {
--vp-font-family-base: 'Inter4CJK', "Hiragino Kaku Gothic ProN", "Meiryo", sans-serif;
--vp-font-family-mono: 'JetBrains Mono', 'BIZ UDGothic', ui-monospace, monospace;
}注意:如果css中没有分别定义中日文字体、当字体家庭中有
sans-serif,monospace这样的字体时,也会根据html的lang属性来选择不同的字体。
上标和下标
VitePress默认不支持上标和下标,需要安装插件。
sh
npm install markdown-it-sup markdown-it-sub配制上下标插件
ts
import sup from 'markdown-it-sup'
import sub from 'markdown-it-sub'
export default {
markdown: {
md.use(sup);
md.use(sub);
}
}Mark
VitePress默认不支持mark标记,需要安装插件。
如: ==重要== 娈为 重要
sh
npm install markdown-it-mark配制mark插件
ts
import mark from 'markdown-it-mark'
export default {
markdown: {
md.use(mark);
}
}如果不安装插件,也可以用
<mark>标签实现。
如:<mark>重要</mark>娈为 重要
数学方程
VitePress默认不支持数学方程,需要安装mathjax插插件。
sh
npm add -D markdown-it-mathjax3@^4配制mathjax插件
ts
import mathjax3 from 'markdown-it-mathjax3'
export default {
markdown: {
math: true
}
}mermaid
VitePress默认不支持mermaid图表,需要安装mermaid相关插件。
由于
VitePress 2.0以上版本不支持安装VitePress-plugin-mermaid插件,如要对应先安装mermaid插件,再自己写代码实现
详细代码连接
https://github.com/vuejs/vitepress/discussions/4999
END