docs: update docs

This commit is contained in:
pengzhanbo 2024-09-04 00:33:56 +08:00
parent f60e4ea63e
commit 30adbecc8c
6 changed files with 396 additions and 67 deletions

View File

@ -1,6 +1,5 @@
---
pageLayout: home
externalLinkIcon: false
config:
-
type: hero

View File

@ -25,41 +25,47 @@ VuePress 是一个 [静态站点生成器](https://en.wikipedia.org/wiki/Static_
与 vuepress 默认主题相比:
- **更好的用户体验**
### 更好的用户体验
大幅度优化了界面、交互,更为美观、简洁,易用。
大幅度优化了界面、交互,更为美观、简洁,易用。
- **更多的功能**
### 更多的功能
代码分组、提示容器、任务列表、数学公式、代码演示、内容搜索、文章评论、加密、文件树 等。
- 灵活的,可完全自定义的 ==首页==
- **更好的开发体验**
- 可选的 ==博客== 、==文档== 、==知识笔记==
增加编译缓存,缓存 markdown 文件编译、缓存 复杂 代码块 内容解析结果。
- 内置支持 ==全文搜索== 、==文章评论== 、==内容加密== 、 ==文章水印== 等;
- **更好的配置**
- 可对 ==代码块== 进行 分组、折叠、聚焦、行高亮、差异对比 等,还可以 嵌入 CodePen、JSFiddle、CodeSandbox 等作为 ==代码演示==
支持使用单独的主题配置文件,避免修改配置导致频繁重启 VuePress 服务。
- 内置支持 [iconify](https://icon-sets.iconify.design/) **200k+** ==图标==
大幅度简化了配置,更易于使用,同时还保留了丰富灵活的配置项,满足个性化的需求。
- 支持 ==嵌入 PDF==、==嵌入 Bilibili/Youtube 视频==
- 支持 chart.js、Echarts、Mermaid、flowchart 等多种可选的 ==图表==
- 灵活的 markdown 容器语法,支持 ==提示容器==、==文件树==、==示例容器== 等;
- 支持 ==布局插槽==、==组件覆写== ==自定义样式== 等,你可以灵活地扩展组件,实现 个性化的 布局。
更多的功能等待你的发现
### 更好的开发体验
增加编译缓存,缓存 markdown 文件编译、缓存 复杂 代码块 内容解析结果。
### 更好的配置
支持使用单独的主题配置文件,避免修改配置导致频繁重启 VuePress 服务。
大幅度简化了配置,更易于使用,同时还保留了丰富灵活的配置项,满足个性化的需求。
### 更多
==plume 主题== 尽可能的内置你可能需要的功能,以及搭建站点所需要的一般性配置,您无需关注这些细节。
目的是,让您更专注于 内容的创作,更好的表达你的想法,享受 Markdown 增强语法带来的便利。
## 功能
- 💻 响应式布局,适配不同的屏幕尺寸
- 📖 博客 & 文档
- 🔗 自动生成文章永久链接
- ⚖ 支持多语言
- 🔑 支持 全站加密、部分加密
- 👀 支持 搜索、文章评论
- 👨‍💻‍ 支持 浅色/深色 主题 (包括代码高亮)
- 📠 markdown 增强,支持 代码块分组、提示容器、任务列表、数学公式、代码演示、文件树 等
- 📚 代码演示,支持 CodePen, Replit, JSFiddle, CodeSandbox
- 📊 嵌入图标,支持 chart.jsEchartsMermaidflowchart 等
- 🎛 资源嵌入,支持 PDF, bilibili视频youtube视频等
::: tip
本主题 基于 [vuepress-next](https://github.com/vuepress/vuepress-next), 目前处于 RC 阶段。

View File

@ -17,10 +17,12 @@ import VPBlogProfile from 'vuepress-theme-plume/components/Blog/VPBlogProfile.vu
主题默认启用 博客功能,通常您无需进行额外的配置。
主题默认会将 `{sourceDir}` 目录下的,除了一些特定的目录(如 `notes` 目录将作为笔记所在目录),
主题默认会将 `{sourceDir}` 目录下的,除了特定的目录(如 `notes` 目录将作为笔记所在目录),
所有 md 文件作为博客文章。
同时,主题会生成一个 链接地址为 `/blog/` 的 博客文章列表页。
主题还会根据 md 文件 所在的 文件目录结构,以 **目录名** 作为 博客文章所属的 **分类**
主题默认会生成一个 链接地址为 `/blog/` 的 博客文章列表页。
展示所有的博客文章,以及 博主的相关信息。
## 国际化支持
@ -112,8 +114,92 @@ title: 标题
主题除了自动生成 **博客文章列表页** 以外,还会自动生成 **标签页****分类页** 和 **归档页**
标签页 可以根据 标签 筛选并展示 博客文章
标签页 可以根据 标签 筛选并展示 博客文章 默认地址为 `/blog/tags/`
分类页 可以根据 原始目录结构 分类展示 博客文章
分类页 可以根据 原始目录结构 分类展示 博客文章, 默认地址为 `/blog/categories/`
归档页根据文章的创建时间进行归档。
归档页根据文章的创建时间进行归, 默认地址为 `/blog/archives/`
## 设置博客为主页
默认情况下,主题 将 **首页****博客页** 分离。
但对于 希望只建立一个 博客站点 的用户而言,可能直接将 博客页 作为 **首页** 是个更好的选择。
主题提供了两种方式来设置博客为主页,满足不同的需求场景:
- **方式一:配置 主页的 `pageLayout` 属性为 `blog`**
::: code-tabs
@tab docs/README.md
```md
---
pageLayout: blog
---
```
:::
此配置会直接将页面应用 博客布局,显示博客文章列表。
这是将主页修改为 博客页的 最简单的方式,但缺点是 缺少灵活性。
- **方式二:配置 主页的 `pageLayout` 属性为 `home`, 添加 `type: blog` 的首页区域类型**
::: code-tabs
@tab docs/README.md
```md
---
pageLayout: home
config:
- type: blog
---
```
:::
使用这种方式,你不仅可以在首页中添加 博客文章列表,还可以灵活的在页面的其他区域添加不同的内容。
比如,配置首屏为 `banner`,然后紧跟着 博客文章列表:
::: code-tabs
@tab docs/README.md
```md
---
pageLayout: home
config:
- type: banner
- type: blog
---
```
:::
更多自定义配置,请参考 [自定义首页](./自定义首页.md)。
当使用以上两种方式 将首页配置为 博客页后,由于主题默认依然会生成 地址为`/blog/` 的博客文章列表页,
这导致存在了重复功能的页面,为此,你需要 [主题配置 > 博客配置](../config/主题配置.md#blog) 中,
**关闭自动生成博客文章列表页**
(还可以在重新修改 分类页/标签页/归档页的链接地址)
```ts
import { plumeTheme } from 'vuepress-theme-plume'
import { defineUserConfig } from 'vuepress'
export default defineUserConfig({
theme: plumeTheme({
blog: {
postList: false, // 禁止生成博客文章列表页
// tagsLink: '/blog/tags/',
// categoriesLink: '/blog/categories/',
// archiveLink: '/blog/archives/',
}
})
})
```

View File

@ -270,23 +270,26 @@ cd open-source # 进入 D: 分区下的 open-source 目录
- docs \# 文档源目录
- .vuepress
- public/ \# 静态资源目录
- client.ts
- config.ts \# vuepress 配值文件
- client.ts \# 客户端配置
- config.ts \# vuepress 配值
- navbar.ts \# 导航栏配置
- notes.ts \# notes 配置
- plume.config.ts \# 主题配置文件
- notes
- plume.config.ts \# 主题配置
- notes \# 系列文档、知识笔记
- demo
- foo.md
- bar.md
- preview
- preview \# 博客分类
- markdown.md
- README.md \# 首页
- package.json
- package-lock.json
- pnpm-lock.yaml
- .gitignore
- README.md
:::
`docs` 目录中, 除 `.vuepress` 目录外,目录中的 所有 markdown 文件都会被识别为文档。
其中,除 `notes` 目录外的 `markdown` 文件会被识别为 博客文章,而 `notes` 目录下 `markdown` 文件会被识别为 文档笔记。
- 除 `notes` 目录外的 `markdown` 文件会被识别为 博客文章,并根据其所在的目录结构,作为 文章分类。
- `notes` 目录下 `markdown` 文件会被识别为 文档笔记。

View File

@ -11,52 +11,55 @@ tags:
## 概述
在本主题满足了 Blog 的基本功能后,期望能够 以 note 或者 book 的形式聚合文章,形式上类似于 vuepress 默认主题。
同时也减少配置的复杂度。
主题提供了 `笔记` 的功能,它用于聚合 同一个系列的文章、或者作为站点的 **子文档**
它能够让你以更加友好的方式,组织管理你的文档。
`笔记` 以 文件结构 作为划分依据,默认以 `notes/` 作为根目录,
存放在 `notes` 目录下的 文档不会作为 博客文章,不会出现在 博客文章列表页中。
## 目录
## 文件结构与配置
文档/知识笔记 默认存放在 `{sourceDir}/notes` 目录下。
示例:
我们有一个项目中,有以下文件结构:
::: file-tree
- \{sourceDir\}
- docs
- notes
- typescript
- foo.md
- rust
- foo.md
- typescript \# typescript 笔记
- basic.md
- types.md
- rust \# rust 笔记
- tuple.md
- struct.md
- blog-post.md \# 博客文章
- README.md \# 站点首页
:::
其中,`typescript``rust` 为目录名,各自独立保存与之相关的 markdown 文件。
`docs/notes` 目录下,有两个子目录,分别用于存放 `typescript``rust` 的系列内容
## 配置
接下来,在配置文件中配置 `notes`
```js
```js :collapsed-lines=20
import { defineUserConfig } from 'vuepress'
import { plumeTheme } from 'vuepress-theme-plume'
export default defineUserConfig({
theme: plumeTheme({
notes: {
dir: '/notes/', // 声明所有笔记的目录
link: '/', // 声明所有笔记默认的链接前缀, 默认为 '/'
// 声明所有笔记的目录,(默认配置,通常您不需要声明它)
dir: '/notes/',
link: '/', // 声明所有笔记默认的链接前缀, 默认为 '/' (默认配置,通常您不需要声明它)
notes: [
// 每个笔记都是 `notes` 数组中的一个对象
{
dir: 'typescript', // 声明笔记的目录,相对于 `notes.dir`
link: '/typescript/', // 声明笔记的链接前缀
sidebar: [ // 配置侧边栏
{
text: '简介',
icon: 'mdi:language-typescript', // 侧边栏图标
items: ['foo'] // 简化写法,主题会自动补全为 `foo.md`
}
]
// 声明笔记的目录,相对于 `notes.dir`,这里表示 `notes/typescript` 目录
dir: 'typescript',
// 声明笔记的链接前缀,与 `notes.link` 拼接,这里表示 `/typescript/`
// 笔记内的所有文章会以 `/typescript/` 作为访问链接前缀。
link: '/typescript/',
// 配置 笔记侧边导航栏,用于导航向笔记内的所有文档
// 声明为 `auto` 的,将根据目录结构自动生成侧边栏导航
sidebar: 'auto'
},
{
dir: 'rust',
@ -71,13 +74,241 @@ export default defineUserConfig({
})
```
主题会根据配置,为对应目录中的 md 文件,生成 永久链接,以及侧边栏。
::: tip
你应该在创建文件之前,先把笔记的目录和链接前缀等配置好,主题需要根据配置,
为目录中的 md 文件生成永久链接,以及侧边栏。
你应该在创建文件之前,建议先把笔记的目录和链接前缀等配置好。
主题默认启用了 [auto-frontmatter](../config/主题配置.md#autofrontmatter)
需要根据配置,为目录中的 md 文件生成永久链接,以及侧边栏。
:::
完整配置查看 [notes配置](../config/notes配置.md)
### 侧边栏配置
`typescript` 目录为例,它拥有如下的文件结构:
::: file-tree
- typescript
- guide
- intro.md
- getting-start.md
- config
- config-file.md
- configuration.md
- reference
- basic.md
- syntax.md
- modules.md
- built-in
- types
- Required.md
- Omit.md
- README.md
:::
#### 自动生成侧边栏
一种最简单的配置方式是 `sidebar: 'auto'` 主题会自动根据 文件结构生成侧边栏,并根据 首个字符的编码 来排序。
如果想要修改 自动生成的侧边栏的顺序,可以直接在 目录名 或 文件名之前,添加 `1.``2.` 等前缀。
::: file-tree
- typescript
- 1.guide
- 1.intro.md
- 2.getting-start.md
- 2.config
- 1.config-file.md
- 2.configuration.md
- …
:::
主题将根据 这部分的前缀的 数字 进行排序,前缀部分不会显示在侧边栏中。
#### 自定义侧边栏
有时候自动生成侧边栏 不能完全满足需求,你可以自定义侧边栏。
以下是 侧边栏的 类型定义:
```ts
type Sidebar = (string | SidebarItem)[]
interface SidebarItem {
/**
* 侧边栏文本
*/
text?: string
/**
* 侧边栏链接
*/
link?: string
/**
* 侧边栏图标
*/
icon?: ThemeIcon
/**
* 当前分组的链接前缀,链接前缀会拼接在 `items` 内的 `link` 之前
* 当且仅当 `items` 内的 `link` 为 相对路径时,才会拼接
*/
prefix?: string
/**
* 次级侧边栏分组
*/
items?: 'auto' | (string | SidebarItem)[]
/**
* 如果未指定,组不可折叠。
* 如果为`true`,组可折叠,并默认折叠。
* 如果为`false`,组可折叠,但默认展开。
*/
collapsed?: boolean
}
```
当 传入类型为 `string` 时,表示 markdown 文件的路径:
```ts
const sidebar: Sidebar = [
'/guide/intro.md',
'/guide/getting-start.md',
'/config/config-file.md',
// ...
]
```
你也可以省略 `.md` 文件后缀,简写为 `/guide/intro` 。主题会解析 对应的文件,获取 **标题** 和 **页面链接地址**
并将其转换为 `{ text: string, link: string }` 的数据形式。
当传入类型为 `SidebarItem` 时:
```ts
const sidebar: Sidebar = [
{ text: '介绍', link: '/guide/intro' },
{ text: '快速上手', link: '/guide/getting-start' },
// ...
]
```
也可以进行多层嵌套:
```ts
const sidebar: Sidebar = [
{
text: '指南',
prefix: '/guide', // 使用 prefix 拼接,可以简写 下面的 items 中的 link 为相对路径
items: [
// 可以混用 string 和 SidebarItem
{ text: '介绍', link: 'intro' },
'getting-start',
],
},
{
text: '配置',
prefix: '/config',
items: 'auto', // items 为 'auto',会根据 prefix 的文件结构自动生成侧边栏
},
]
```
:::warning
不建议 侧边栏的层级过深,超过 3 层的侧边栏 可能会导致 糟糕的 UI 效果。
:::
### 侧边栏图标
为侧边栏添加 图标 有助于 侧边栏更好的呈现。得益于 [iconify](https://iconify.design/) 这个强大的开源图标库,
你可以使用超过 `200k` 的图标,仅需要添加 `icon` 配置即可。
```ts
const sidebar: Sidebar = [
{
text: '指南',
prefix: '/guide',
icon: 'ep:guide', // iconify icon name // [!code hl]
items: [
{ text: '介绍', link: 'intro', icon: 'ph:info-light' }, // [!code hl]
],
},
]
```
也可以使用本地图标,或者本地图片:
```ts
const sidebar: Sidebar = [
{
text: '指南',
prefix: '/guide',
icon: '/images/guide.png', // iconify icon name // [!code hl]
items: [
{ text: '介绍', link: 'intro', icon: '/images/info.png' }, // [!code hl]
// 也可以是一个远程图片
{ text: '快速上手', link: 'getting-start', icon: 'https://cn.vuejs.org/images/logo.png' },
],
},
]
```
**请注意,使用本地图片必须以 `/` 开头,表示为 静态资源路径,它将从 `.vuepress/public/` 目录中加载。**
::: file-tree
- docs
- .vuepress
- public \# 在这个位置保存静态资源
- images
- guide.png
- info.png
- …
:::
你可能已经注意到,`sidebar: auto` 时,该如何配置 侧边栏图标,事实上很简单,直接在 文件的 `frontmatter` 部分,
添加 一个 `icon` 字段即可。
::: code-tabs
@tab typescript/guide/intro.md
```md
---
title: 介绍
icon: ep:guide
---
```
:::
## 笔记首页
你可能注意到,在 `typescript` 目录下,有一个 `README.md` 文件,它会被作为笔记首页显示。
::: file-tree
- typescript
- README.md
- …
- …
:::
默认情况下,它与 普通的文档页面 没有区别,这是因为 主题 默认对 所有页面 设置了 `pageLayout: docs`
但你可以直接配置 `pageLayout: 'home'`,就像配置 [站点首页](./自定义首页.md) 一样,为 笔记配置一个个性化的首页!
::: code-tabs
@tab typescript/README.md
```md
---
pageLayout: home
config:
- type: hero
- type: features
---
```
:::

View File

@ -436,6 +436,10 @@ config:
<img src="/images/custom-text-image.png" alt="text-image" />
:::
### blog
将 博客文章列表页 作为一个单独区域,插入到 首页中。
### profile
- 类型: `PlumeThemeHomeProfile`