@vitepress-code-preview/plugin
TypeScript icon, indicating that this package has built-in type declarations

1.0.4 • Public • Published

vitepress-code-preview

一款给 vitepress 文档中嵌入的 Vue 示例代码增加演示功能的插件, 支持 SFC, JSX, TSX

🎉 简介

本插件基于 vitepressmarkdown-itunified 实现,它可以帮助你在编写文档的时候,对嵌入的 Vue 示例代码增加演示功能,支持的 Vue 组件形式有 SFC, JSX, TSX

🏄‍♂️ 插件包

Package Version (click for changelogs)
@vitepress-code-preview/container container version
@vitepress-code-preview/plugin plugin version

⚙ 安装

pnpm add @vitepress-code-preview/container @vitepress-code-preview/plugin

🚀 引入

  • ① 编辑 docs/vite.config.ts,注册 Vite 插件,如果需要支持 JSX 组件,请安装 @vitejs/plugin-vue-jsx
import { defineConfig } from 'vite'
import vueJsx from '@vitejs/plugin-vue-jsx'
import { viteDemoPreviewPlugin } from '@vitepress-code-preview/plugin'
export default defineConfig({
  plugins: [viteDemoPreviewPlugin(), vueJsx()],
})
  • ② 编辑 docs/.vitepress/config.ts,注册 markdown 插件
import { fileURLToPath, URL } from 'node:url'
import { defineConfig } from 'vitepress'
import { demoPreviewPlugin } from '@vitepress-code-preview/plugin'

export default defineConfig({
  markdown: {
    config(md) {
      const docRoot = fileURLToPath(new URL('../', import.meta.url))
      md.use(demoPreviewPlugin, { docRoot })
    },
  },
})
  • ③ 编辑 docs/.vitepress/theme/index.ts,注册组件容器
import type { Theme } from 'vitepress'
import DefaultTheme from 'vitepress/theme'
import DemoPreview, { useComponents } from '@vitepress-code-preview/container'
import '@vitepress-code-preview/container/dist/style.css'

export default {
  ...DefaultTheme,
  enhanceApp(ctx) {
    useComponents(ctx.app, DemoPreview)
  },
} satisfies Theme

💡 基础用法

demo容器中直接编写vue代码

:::demo

```vue
<template>
  <div>{{ title }}</div>
</template>
<script lang="ts" setup>
import { ref, defineComponent } from 'vue'
const title = ref('this is basic demo')
</script>
```

:::

basic-demo

💪 支持 JSX 和 TSX

:::demo

```jsx
import { defineComponent, ref } from 'vue'

export default defineComponent({
  setup() {
    const title = ref('this is jsx demo')
    return () => <div>{title.value}</div>
  },
})
```

:::

support-jsx-tsx

✨ 使用其他已注册的组件

假设我们有一个第三方的Button组件已经在.vitepress/theme/index.ts中注册过了,那么就可以在demo容器中使用它

// ...
export default {
  ...DefaultTheme,
  enhanceApp(ctx) {
    // ...
    useComponents(app, Button, Button.name)
  },
} satisfies Theme
:::demo

```vue
<template>
  <MoButton>默认按钮</MoButton>
  <MoButton type="primary">主要按钮</MoButton>
  <MoButton type="success">成功按钮</MoButton>
  <MoButton type="info">信息按钮</MoButton>
  <MoButton type="warning">警告按钮</MoButton>
  <MoButton type="danger">危险按钮</MoButton>
</template>
```

:::

other-component

⚡ 直接引入组件文件

如果你的示例代码比较多,在 markdown 中直接写会比较麻烦,那么可以引入一个单独的组件文件,引入的路径是以docs目录作为根目录

:::demo src=examples/Input.vue
:::

use-file

Package Sidebar

Install

npm i @vitepress-code-preview/plugin

Weekly Downloads

8

Version

1.0.4

License

MIT

Unpacked Size

33.8 kB

Total Files

8

Last publish

Collaborators

  • welives