[Vue]使用 Markdown 作为 Vue 组件,支持主题切换

使用 Markdown 作为 Vue 组件。

vue是不支持直接读取md文件的,但是我们可以使用一些插件将md转换为可识别文件,比如unplugin-vue-markdown,本文章将结合pnpm+Vite+ts实现该功能。

  1. 首先需要安装依赖
	pnpm i unplugin-vue-markdown
  1. vue插件include中新增/.md$/,让vue识别md文件为vue组件,新增插件Markdown,用于将md解析为vue组件,在项目的根目录中的vite.config.ts中plugins属性中增加如下代码,
	import Markdown from 'unplugin-vue-markdown/vite';
	//...其他插件
	// 增加解析/\.md$/
	vue({
      include: [/\.vue$/, /*新增 ->>>*//\.md$/],
      script: {
        defineModel: true
      }
    }),
    // 以下新增部分
    Markdown({
      markdownItOptions: {
        html: true,
        linkify: true,
        typographer: true
      },
      wrapperClasses: ['']
    }),
	//...其他插件

  1. 新增ts类型识别,在任意的.d.ts中新增如下代码,不然引入会报错
	declare module '*.md' {
	  import type { ComponentOptions } from 'vue';
	  const Component: ComponentOptions;
	  export default Component;
	}

接下来我们就可以引入md并当成一个Vue组件使用啦

	<template>
	  <V1 />
	</template>
	
	<script lang="tsx" setup>
	import V1 from './v1.md';
	</script>

示意图
是

添加样式并适应主题切换

  1. 需要先获取md css样式这里推荐github-markdown-dark,将github-markdown-dark.css和github-markdown-light.css 复制下来添加到自己的项目style文件中。

  2. 修改css样式,在两个css文件中替换css类名github-markdown-light.css中查询markdown-body替换markdown-body-light;github-markdown-dark.css中亦是如此在这里插入图片描述
    在这里插入图片描述

  3. vue的main.ts中引入两个css,请根据自己的路径自行修改
    在这里插入图片描述

  4. 封装组件MarkDownPreview,动态绑定class以达到动态切换效果,useThemeStore请自行封装,这里不能使用结构拿出darkMode会造成响应式丢失

	<template>
	  <div class="p2" :class="theme.darkMode ? 'markdown-body-dark' : 'markdown-body-light'">
	    <slot></slot>
	  </div>
	</template>
	
	<script setup lang="ts">
	import { useThemeStore } from '@/store';
	
	defineOptions({ name: 'MarkDownPreview' });
	
	const theme = useThemeStore();
	</script>
	<style scoped></style>

我们修改对应的引用组件即可完成效果!

	<template>
	  <MarkDownPreview>
	    <V1 />
	  </MarkDownPreview>
	</template>
	
	<script lang="tsx" setup>
	import MarkDownPreview from '@/components/common/markdown-preview.vue';
	import V1 from './v1.md';
	</script>

在这里插入图片描述
在这里插入图片描述
教程结束!respect~

  • 50
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值