Table of contents
展开目录
目录
源码
导入组件库
和调试组件一样,使用 vitepress 编写文档时,也需要安装并实时的调试组件:
在 package.json
中加入 docs 相关的 scripts:
安装组件库
样式冲突
网上很多文章都“手把手教你开发组件库”,但却没有说如何解决组件库与 vitepress 样式冲突,
当你使用 layout:doc
来编写组件的 .md
页面后,你就会发现很多样式产生了冲突。
官方文档在 Custom Containers 有详细的说明,
新建 docs/postcss.config.mjs
:
当你在使用组件库的组件时,只需要使用 .vp-raw
包裹,便不会再受到 vp-doc 的样式影响了:
文档规划
整个 vitepress
中会使用到的组件有 3 种:
- 组件库中的组件;
- 组件库的示例组件;
- 自定义组件;
组件库
我们已经在 themes/index.ts
中,通过 app.use() 批量注册过,可以直接使用。
组件库的示例组件
例如 <avatar />
组件,它主要是一个容器组件,不同的 props 会带来不同的形状变化,可以建立多个 SFC demo;
自定义组件
项目中的自定义组件,例如一个用来渲染示例组件,并支持代码预览的组件。
目录结构
批量注册示例组件
随着组件库的庞大,示例组件 会越来越多,
为了能在 *.md
中使用,这些组件必须在 themes/index.ts
中使用 app.component() 进行注册:
才写了三个,我就已经累到不行…
接下来,我们使用 import.meta.glob
来读取并批量注册 components/*
和 examples/*
中的 SFC:
渲染示例组件
代码高亮
渲染示例组件很简单,直接使用组件即可。
要高亮示例组件中的代码,我们需要用到 prismjs
:
使用 prismjs
封装专门用于高亮代码的 prism.vue
:
只需要传入需要高亮的文本:rawData
,就能高亮显示我们的代码:
rawData
我们的 rawData
都在一个个的 sfc 文件中,如何读取这些文件并将文件的内容提取出来?
如果使用 node:fs
模块编写一个脚本,将 examples/**/*.vue
解析出来,
每次新增组件都要重新跑一次脚本?
好在 vitepress 提供了 Build-Time Data Loading,
只要定义一个以 data.js
或者 data.ts
结尾的文件,它就是一个数据加载器,
数据只会在构建时执行,生成的数据最终会序列化为 JSON,并且可以导入到任意的页面或者组件。
我们只需要 watch: ['../examples/**/*.vue']
,并调用 node:fs
模块,将 SFC 文件的 content
解析出来,
并以 { sfcName: 'sfc component name', sfcRawData: 'sfc file content' }
的形式返回出一个数组即可:
ex-code
<ex-code />
用于渲染组件 + 高亮代码:
- 通过
vp-raw
解决了样式冲突;
- 通过
import.meta.glob
批量注册组件;
- 通过
prismjs
高亮代码;
- 通过
Build-Time Data Loading
获取 rawData
;
至此,使用 vitepress 搭建组件库文档已经可以完美开始了。