Skip to content

litingyes/vite-plugin-vue-preview

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Mar 1, 2025
498cc44 · Mar 1, 2025
Aug 9, 2023
Feb 25, 2024
Jul 7, 2023
Jun 19, 2023
Jun 17, 2023
Aug 7, 2023
Feb 25, 2024
Feb 25, 2023
Jun 9, 2023
Jun 20, 2023
Feb 18, 2023
Feb 25, 2024
Feb 25, 2024
Dec 1, 2024
Jun 20, 2023
Mar 1, 2025
May 18, 2023
Mar 23, 2023
Jun 18, 2023

Repository files navigation

vite-plugin-vue-preview

Downloads Downloads Version License

简体中文

A Vite plugin made for previewing and editing Vue components in Markdown and, of course, exporting a VuePreview component to be used directly in Vue applications.

Tip

For most simple code preview scenarios that don't strongly bind to a vue component, it's even more recommended to use the sandboxrun

Demo

Install

pnpm add vite-plugin-vue-preview@1

Features

  • Support for Vue/Vitepress applications
  • Support code preview
  • Support online editing

Props

VuePreview

interface Props {
  // Initialization code string
  code: string
  // Whether to collapse the code when the component is mounted
  collapse: boolean
  // Whether to turn on ssr
  ssr: boolean
  // Whether the incoming props string is encoded by encodeURIComponent (necessary mainly in vitepress)
  encode: boolean
  // The body style in the iframe element
  previewBodyStyle: Partial<CSSStyleDeclaration> | string
  // Styling of the root component in the iframe element
  previewAppStyle?: Partial<CSSStyleDeclaration> | string
  // Third-party dependencies (CDN) that can be introduced by the demo component
  importMap?: Record<string, string> | string
}

CSS Styles

/* VuePreview border-radius */
--vue-preview-radius
/* VuePreview border-color */
--vue-preview-color-border
/* VuePreview box-shadow */
--vue-preview-box-shadow
/* VuePreview color */
--vue-preview-color-icon
/* VuePreview hover:color */
--vue-preview-color-icon-bg-hover
/* VuePreview background-color of loading model */
--vue-preview-color-model-bg
/* VuePreview color of loading icon */
--vue-preview-color-loading

Usage

Vue

Import the VuePreview component and style

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

Import the VuePreview component / style and plugin

// 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)
  },
}

Once you've set up the above, you're ready to use it in your markdown file:

  
```vue preview
<template>
  <h1>Demo: vite-plugin-vue-preview</h1>
</template>
```
  

Plugin Configuration

There is no elegant way to pass component Props in a MarkDown file, so passing in specific component Props is supported in the plugin configuration for global configuration

// 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',
      },
    },
  })],
})