Skip to content

在 Markdown 中使用 Vue

在 VitePress 中,每个 Markdown 文件都会被编译成 HTML,然后作为 Vue 单文件组件处理。这意味着你可以在 Markdown 中使用任何 Vue 功能,包括动态模板、使用 Vue 组件或通过添加 <script> 标签来使用任意的页面内 Vue 组件逻辑。

模板语法

插值

每个 Markdown 文件首先被编译成 HTML,然后作为 Vue 组件传递给 Vite 处理管道。这意味着你可以在文本中使用 Vue 风格的插值:

输入

md
{{ 1 + 1 }}

输出

text
2

指令

指令也同样可以使用:

输入

md
<span v-for="i in 3" :key="i">{{ i }}</span>

输出

123

使用组件

当你需要更大的灵活性时,VitePress 允许你使用自己的 Vue 组件扩展你的创作工具包。

在标题中导入

如果你的组件只在少数几个地方使用,推荐的使用方式是在使用它的文件中导入组件。

md
<script setup>
import CustomComponent from '../components/CustomComponent.vue'
</script>

# Docs

This is a .md using a custom component

<CustomComponent />

## More docs

...

在主题中全局注册

如果组件将在文档的多个页面中使用,它们可以在主题中全局注册(或作为扩展默认 VitePress 主题的一部分)。查看主题指南了解更多信息。

.vitepress/theme/index.js 中,enhanceApp 函数接收 Vue 应用实例,因此你可以像在常规 Vue 应用中一样注册组件

js
import DefaultTheme from 'vitepress/theme'

export default {
  extends: DefaultTheme,
  enhanceApp(ctx) {
    // 注册全局组件
    ctx.app.component('MyGlobalComponent', /* ... */)
  }
}

浏览器 API 访问限制

因为 VitePress 应用程序在生成静态构建时在 Node.js 中进行服务器端渲染,所以任何 Vue 使用都必须符合通用代码要求。简而言之,确保只在 beforeMountmounted 钩子中访问浏览器/DOM API。

如果你正在使用或演示对 SSR 不友好的组件(例如,包含自定义指令),你可以将它们包装在内置的 <ClientOnly> 组件中:

md
<ClientOnly>
  <NonSSRFriendlyComponent />
</ClientOnly>

另请参阅:

vitepress开发指南