Skip to content
目录

Vite Plugin Vue Preview

DownloadsDownloadsVersionLicense

一个为在 Markdown 中预览和编辑Vue组件而生的Vite插件,当然,也导出了一个 VuePreview 组件可以直接在 Vue 应用中使用

演示

安装

bash
pnpm add vite-plugin-vue-preview

特征

  • 支持 Vue3/Vitepress 应用
  • 支持代码预览
  • 支持在线编辑

Props

VuePreview

TS
interface Props {
  // 初始化代码字符串
  code: string
  // 组件挂载时是否折叠代码
  collapse: boolean
  // 是否开启 ssr
  ssr: boolean
  // 传入的 props 字符串是否被 encodeURIComponent 编码(主要在 vitepress 中很必要)
  encode: boolean
  // iframe 元素中的 body 样式
  previewBodyStyle: Partial<CSSStyleDeclaration> | string
  // iframe 元素中根组件的样式
  previewAppStyle?: Partial<CSSStyleDeclaration> | string
  // demo 组件可引入的第三方依赖(CDN)
  importMap?: Record<string, string> | string
}

CSS 样式

CSS
/* VuePreview 外边框圆角 */
--vue-preview-radius
/* VuePreview 边框颜色 */
--vue-preview-color-border
/* VuePreview 盒子阴影 */
--vue-preview-box-shadow
/* VuePreview 图标颜色 */
--vue-preview-color-icon
/* VuePreview 图标 hover 颜色 */
--vue-preview-color-icon-bg-hover
/* VuePreview 加载区域背景色 */
--vue-preview-color-model-bg

用法

Vue 应用

导入 VuePreview 组件及样式

TS
import { createApp } from 'vue'
import { VuePreview } from 'vite-plugin-vue-preview'
import 'vite-plugin-vue-preview/style.css'

const app = createApp()

app.component('VuePreview', VuePreview)

VitePress 应用

导入 VuePreview 组件及样式,同时配置插件设置

TS
// vite.config.ts
import { defineConfig } from 'vite'
import { vuePreviewPlugin } from 'vite-plugin-vue-preview'

export default defineConfig({
  plugins: [vuePreviewPlugin()],
})

// .vitepress/theme/index.ts
import DefaultTheme from 'vitepress/theme'
import { VuePreview } from 'vite-plugin-vue-preview'
import 'vite-plugin-vue-preview/style.css'

export default {
  ...DefaultTheme,
  enhanceApp(ctx) {
    DefaultTheme.enhanceApp(ctx)
    ctx.app.component('VuePreview', VuePreview)
  },
}

一旦你按照上述流程配置完成,你就可以在你的markdown文件中使用了:

md
```vue preview
<script lang="ts" setup>
import { isSpecialBooleanAttr } from '@vue/shared'
</script>

<template>
  <h1>演示: vite-plugin-vue-preview</h1>
  <span>readonly is special boolean attr: {{ isSpecialBooleanAttr('readonly') }}</span>
</template>
```

插件配置

在 MarkDown 文件中,传递组件 Props 并没有太优雅的办法,故在插件配置中支持传入特定的组件 Props 进行全局配置

TS
// vite.config.ts
import { defineConfig } from 'vite'
import { vuePreviewPlugin } from 'vite-plugin-vue-preview'

export default defineConfig({
  plugins: [vuePreviewPlugin({
    props: {
      previewBodyStyle: {
        display: 'flex',
        justifyContent: 'center',
        alignItems: 'center',
      },
      previewAppStyle: {
        display: 'flex',
        justifyContent: 'center',
        alignItems: 'center',
        flexDirection: 'column',
      },
      importMap: {
        '@vue/shared': 'https://unpkg.com/@vue/shared@latest/dist/shared.esm-bundler.js',
      },
    },
  })],
})

Released under the MIT License.