【二】组件库文档系统

286 阅读2分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第12天,点击查看活动详情

文档系统

我们基于 vitepress 搭建组件库文档系统。

一、安装依赖

pnpm add -D vitepress

vitepress 是基于 vite 的,请确保你的项目是 vite 搭建的

二、实现第一个文档demo

在根目录下执行:mkdir docs && echo # Hello VitePress > docs/index.md

相当于:创建 docs 文件夹,并在其中的 index.md 文件中写入 # Hello VitePress

如下图所示:

3.png

三、预览md文件

现在,我们想用 vitepress 将文件系统跑起来,在页面上预览我们的 md 文件

  • 添加 script 脚本命令(package.json

使用 vitepressdev(开发)模式,启动 docs 文件夹下的所有内容。它会识别 md 文件,将其变为页面。

同理,buildserve 分别代表 “打包” 和 “生成版本预览”

{
  "scripts": {
    "docs:dev": "vitepress dev docs",
    "docs:build": "vitepress build docs",
    "docs:serve": "vitepress serve docs"
  },
}
  • 现在我们可以尝试预览一下了

执行脚本 npm run docs:dev,然后在相应的端口(我这里是3000),就可以看到我们的页面了

4.png

四、侧边栏及组件显示配置

docs 下创建 .vitepress 文件夹,继续在其中创建 config.ts 文件,写入如下内容

import { defineConfig } from "vitepress";

const sidebar = {
  "/": [
    { text: "快速开始", link: "/", items: [] },
    {
      text: "通用",
      items: [{ text: "Button 按钮", link: "/components/button/" }],
    },
  ],
};

export default defineConfig({
  themeConfig: {
    sidebar,
  },
});
  • 创建 button

docs 下新建文件 docs/components/button/index.md

# Button

我们再来观察一下此时的页面:可以看到导航栏内容已经显示了。

5.png

五、显示组件

修改 button/index.md 文件

# Button
<HelloWorld></HelloWorld>

markdown 文件中,组件该如何解析以及显示呢?

  • 添加vite配置:docs/vite.config.ts
import { defineConfig } from "vite";
import VueJsx from "@vitejs/plugin-vue-jsx";

export default defineConfig({
  plugins: [VueJsx()],
});
  • 添加类型文件:docs/docs.d.ts
declare module "*.vue" {
  import type { DefineComponent } from "vue";
  const component: DefineComponent<{}, {}, any>;
  export default component;
}
  • 添加样式文件:docs/.vitepress/theme/index.ts
import Theme from "vitepress/theme";
import HelloWorld from "../../../src/components/HelloWorld.vue";

export default {
  ...Theme,
  // 扩展应用程序实例
  enhanceApp({ app }) {
    // 注册组件
    app.component("HelloWorld", HelloWorld);
  },
};

此时再来看页面,可以发现 HelloWorld 已经在 Button 页面中显示了

六、显示组件代码

  • 安装插件
pnpm add -D vitepress-theme-demoblock
  • 修改配置:docs/.vitepress/theme/index.ts
import { demoBlockPlugin } from "vitepress-theme-demoblock";
export default defineConfig({
  themeConfig: {
    sidebar,
  },
  markdown: {
    config(md) {
      // 这里可以使用markdown-it插件
      md.use(demoBlockPlugin);
    },
  },
});
  • 注册组件:.vitepress/theme/index.ts
import Theme from "vitepress/theme";
import HelloWorld from "../../../src/components/HelloWorld.vue";

import DemoBlock from "vitepress-theme-demoblock/components/DemoBlock.vue";
import Demo from "vitepress-theme-demoblock/components/Demo.vue";

export default {
  ...Theme,
  // 扩展应用程序实例
  enhanceApp({ app }) {
    // 注册组件
    app.component("DemoBlock", DemoBlock);
    app.component("Demo", Demo);

    app.component("HelloWorld", HelloWorld);
  },
};
  • 修改组件文档:docs/components/button/index.md
# Button

:::demo 这是HelloWorld组件,我们可以传入msg属性给它
```vue
<template>
  <HelloWorld></HelloWorld>
</template>
```
:::

现在重启项目,可以看到页面的组件信息了

6.png