支持导入markdown文件

在根目录创建plugins/md.ts

  1. // @ts-nocheck
  2. import path from 'path'
  3. import fs from 'fs'
  4. import marked from 'marked'
  5. const mdToJs = str => {
  6. const content = JSON.stringify(marked(str))
  7. return `export default ${content}`
  8. }
  9. export function md() {
  10. return {
  11. configureServer: [ // 用于开发
  12. async ({ app }) => {
  13. app.use(async (ctx, next) => { // koa
  14. if (ctx.path.endsWith('.md')) {
  15. ctx.type = 'js'
  16. const filePath = path.join(process.cwd(), ctx.path)
  17. ctx.body = mdToJs(fs.readFileSync(filePath).toString())
  18. } else {
  19. await next()
  20. }
  21. })
  22. },
  23. ],
  24. transforms: [{ // 用于 rollup // 插件
  25. test: context => context.path.endsWith('.md'),
  26. transform: ({ code }) => mdToJs(code)
  27. }]
  28. }
  29. }

在vite.config.ts中使用

  1. import vue from '@vitejs/plugin-vue'
  2. import {md} from './plugins/md'
  3. // https://vitejs.dev/config/
  4. export default {
  5. plugins: [vue({
  6. include: [/\.vue$/, /\.md$/], // <--
  7. }), md()]
  8. }

动态import markdown文件

  1. <template>
  2. <article class="markdown-body" v-html="content">
  3. </article>
  4. </template>
  5. <script lang="ts">
  6. import {
  7. ref
  8. } from 'vue'
  9. export default {
  10. props: {
  11. path: {
  12. type: String,
  13. required: true
  14. }
  15. },
  16. setup(props) {
  17. const content = ref < string > (null)
  18. import(props.path).then(result => {
  19. content.value = result.default
  20. })
  21. return {
  22. content
  23. }
  24. }
  25. }
  26. </script>

在路由中使用h函数动态生成组件

  1. import { h } from 'vue';
  2. import Markdown from './components/Markdown.vue';
  3. const md = filename => h(Markdown, { path: `../markdown/${filename}.md`, key: filename })
  4. // ...
  5. {
  6. path: '/doc',
  7. component: Doc,
  8. children: [
  9. { path: 'install', component: md('install') },
  10. { path: 'intro', component: md('intro') },
  11. { path: 'get-started', component: md('get-started') },
  12. ],
  13. }

也可以使用现成的库

使用vite-plugin-md引入markdown文件
(使用vite-plugin-md后,不需要手动添加markdown-body类)

  1. # 安装
  2. 打开终端运行下列命令:

npm install king-ui

yarn add king-ui

  1. 下一节:[开始使用](#/doc/get-started)
  1. <template>
  2. <Install />
  3. </template>
  4. <script>
  5. import Install from '../markdown/install.md'
  6. export default {
  7. components: {
  8. Install
  9. }
  10. }
  11. </script>

tsconfing.json中添加配置运行使用Javascript

  1. "allowJs": true

解决typescript不能识别md

在根目录的env.d.ts中添加

  1. declare module '*.vue' {
  2. import { ComponentOptions } from 'vue'
  3. const Component: ComponentOptions
  4. export default Component
  5. }
  6. declare module '*.md' {
  7. import { ComponentOptions } from 'vue'
  8. const Component: ComponentOptions
  9. export default Component
  10. }

pre标签

  1. 元素表示预定义格式文本。在该元素中的文本通常按照原文件中的编排,以等宽字体的形式展现出来,文本中的空白符(比如空格和换行符)都会显示出来。

  2.   <pre>
  3.       ___________________________
  4.   &lt; I'm an expert in my field. &gt;
  5.       ---------------------------
  6.           \   ^__^
  7.            \  (oo)\_______
  8.               (__)\       )\/\
  9.                   ||----w |
  10.                   ||     ||
  11.   </pre>
  12.  
  13. &lt;&gt;<>符号