zl程序教程

您现在的位置是:首页 >  前端

当前栏目

vuepress的markdown中引入vue单文件组件

Vue文件组件 引入 markdown
2023-09-11 14:17:27 时间

前言

有这个需求,需要封装一些组件 在markdown中使用。
找遍官方文档发现没有,顶多也就支持可以在md里定义<script setup>将md作为一个vue组件去使用 Markdown 与 Vue SFC,但是这无满足我的需求。
最后发现官方提供了一个plugin-register-components插件,可以支持此需求

安装

yarn add --dev @vuepress/plugin-register-components@next

使用

vue组件放在这个位置

你的项目
   |---docs
      |---vuepress
        |---components

配置文件启用此插件

const { registerComponentsPlugin } = require('@vuepress/plugin-register-components')

module.exports = {
  plugins: [
    registerComponentsPlugin({
      // 配置项
       componentsDir: path.resolve(__dirname, './components'),
    }),
  ],
}

进阶

vue单文件组件获取md信息

如上引入的这个单文件组件,如何获得当前md的文件信息呢。如下即可

<script setup>
import { usePageData } from "@vuepress/client";

const pageData = usePageData();
console.log(pageData);
</script>

<template>你好世界</template>

usePageData是vuepress提供的一个钩子,隶属于客户端api中,更多细节可以去看它的官方文档

通过客户端配置文件 注册vue单文件组件

除了上边说的 通过客户端配置文件也可以注册全局vue组件 提供md使用

├─ docs
│  ├─ .vuepress
│  │  ├─ client.js   <--- 客户端配置文件
│  │  └─ config.js   <--- 配置文件
│  └─ README.md
├─ .gitignore
└─ package.json

客户端配置文件里增加如下代码

import { defineClientConfig } from '@vuepress/client'
import MyComponent from './MyComponent.vue'

export default defineClientConfig({
  enhance({ app }) {
    app.component('MyComponent', MyComponent)
  },
})

tips: 除了全局的客户端配置文件插件和主题都可以通过clientConfigFile属性来设置配置客户端