0.3.29 • Published 1 year ago

md2vuesfc v0.3.29

Weekly downloads
-
License
-
Repository
-
Last release
1 year ago

MD2VueSFC

A Vue3 component that allows you to parse markdown at runtime and mix vue-sfc into it. It is SSR-friendly, inspired by markvue and vuejs/repl.

How to use

1: Install the package:

npm install md2vuesfc --save

2: Import it to your project:

import { createApp } from 'vue';
import App from './App.vue';

import md2vuesfc from 'md2vuesfc';

const app = createApp(App)

app.use(md2vuesfc)

app.mount('#app');

3: Use it in your pages:

create a markdown string:

// ./demo.ts
export const demoContent =
  `# {{ count }}
<button @click="add">add</button>
## Subtitle

Here's some content.

Next is a Vue SFC (counter).


<script setup lang="ts">
import { ref } from 'vue';
const count = ref(0);
const add = () => {
  count.value++
}
</script>

## Intro

<style scoped>
button {
  padding: 6px 18px;
  background: #41aeff;
  color: #fff;
  font-weight: 600;
  border-radius: 6px;
  border: none;
  cursor: pointer;
}
</style>`

use it:

<script setup lang="ts">
import { demoContent } from './demo';
import HelloWorld from './helloworld.vue';
</script>

<template>
  <div>
    <MarkVue
      :content="demoContent"
    />
  </div>
</template>

advanced usage

Customize markdown behavior

The component uses markdown-it library internally, you can pass in the markdown-it instance as prop, and before that you can customize its behavior.

<!-- @format -->

<script setup lang="ts">
import { demoContent } from './demo';
import MarkdownIt from 'markdown-it';
import HelloWorld from './helloworld.vue';
import anchor from 'markdown-it-anchor';

const md = MarkdownIt({ html: true }).use(anchor);
</script>

<template>
  <div>
    <MarkVue
      :markdown-it="md"
      :content="demoContent"
    ></MarkVue>
  </div>
</template>

Use vue components inside markdown

You can use components in Markdown like this

// ./demo.ts
export const demoContent =
  `# {{ count }}
<button @click="add">add</button>
<helloworld></helloworld>
## Subtitle

Here's some content.

Next is a Vue SFC (counter).


<script setup>
import { ref } from 'vue';
import { helloworld } from 'components'
const count = ref(0);
const add = () => {
  count.value++
}
</script>

## Intro

<style scoped>
button {
  padding: 6px 18px;
  background: #41aeff;
  color: #fff;
  font-weight: 600;
  border-radius: 6px;
  border: none;
  cursor: pointer;
}
</style>`

Pass in the corresponding component as prop

<!-- @format -->

<script setup lang="ts">
import { demoContent } from './demo';
import HelloWorld from './helloworld.vue';
</script>

<template>
  <div>
    <MarkVue
      :content="demoContent"
      :context="{
        components: {
          helloworld: HelloWorld,
        },
      }"
    ></MarkVue>
  </div>
</template>

Features

Supported SFC Features:

  • ts lang

  • script

  • script setup

  • Scoped styles

  • SSR

Unsupported SFC Features:

  • Style Preprocessors
0.3.29

1 year ago

0.3.28

1 year ago

0.3.27

1 year ago

0.3.26

1 year ago

0.3.20

1 year ago

0.3.25

1 year ago

0.3.24

1 year ago

0.3.23

1 year ago

0.3.22

1 year ago

0.3.21

1 year ago

0.3.19

1 year ago

0.3.17

1 year ago

0.3.16

1 year ago

0.3.15

1 year ago

0.3.14

1 year ago

0.3.13

1 year ago

0.3.18

1 year ago

0.3.9

1 year ago

0.3.12

1 year ago

0.3.11

1 year ago

0.3.10

1 year ago

0.3.8

1 year ago

0.1.0

1 year ago

0.3.0

1 year ago

0.1.1

1 year ago

0.3.6

1 year ago

0.3.5

1 year ago

0.3.7

1 year ago

0.3.2

1 year ago

0.3.1

1 year ago

0.3.4

1 year ago

0.0.7

1 year ago

0.3.3

1 year ago

0.0.6

1 year ago

0.0.5

1 year ago

0.0.4

1 year ago

0.0.3

1 year ago

0.0.2

1 year ago