使用Markdown-it插件实现在页面渲染markdown

引言

Markdown-it 是一个 javascript markdown 解析器,导出一个函数,可以生成纯 HTML,人们可以随意使用。如 GitHub 页面所述,它还具有大量插件和功能。

用它制作一个Vue 组件非常容易,唯一的要求是在设置一些参数后安装和导入markdown-it函数并使用该render方法。

常用插件

名称描述语法示例
markdown-it-abbr注释*[HTML]: 超文本标记语言HTML
markdown-it-emoji表情😃😃
markdown-it-footnote脚注参考文献[^1]参考文献1
markdown-it-mark突出显示标记标记
markdown-it-sub下标H2OH2O
markdown-it-sup上标X2X2
markdown-it-checkbox复选框未选:- [ ] 选中:- [x]

安装

pnpm i markdown-it

插件安装,可以按需安装
pnpm i markdown-it-checkbox
pnpm i markdown-it-imsize
pnpm i markdown-it-expandable
pnpm i markdown-it-abbr
pnpm i markdown-it-anchor
pnpm i markdown-it-footnote
pnpm i markdown-it-highlightjs
pnpm i markdown-it-sub
pnpm i markdown-it-sup
pnpm i markdown-it-task-lists
pnpm i markdown-it-toc-done-right

使用

  • 自定义组件 MarkdownRenderer
<template>
  <div v-html="markdown.render(source)" />
</template>

<script setup>
import MarkdownIt from "markdown-it";
import MarkdownItAbbr from "markdown-it-abbr";
import MarkdownItAnchor from "markdown-it-anchor";
import MarkdownItFootnote from "markdown-it-footnote";
import MarkdownItHighlightjs from "markdown-it-highlightjs";
import MarkdownItSub from "markdown-it-sub";
import MarkdownItSup from "markdown-it-sup";
import MarkdownItTasklists from "markdown-it-task-lists";
import MarkdownItTOC from "markdown-it-toc-done-right";

const markdown = new MarkdownIt()
    .use(MarkdownItAbbr)
    .use(MarkdownItAnchor)
    .use(MarkdownItFootnote)
    .use(MarkdownItHighlightjs)
    .use(MarkdownItSub)
    .use(MarkdownItSup)
    .use(MarkdownItTasklists)
    .use(MarkdownItTOC);

defineProps({
  source: {
    type: String,
    default: ""
  }
});
</script>

  • 在页面中引用
xml 代码解读复制代码<template>
    <MarkdownRenderer :source="'# Hi!!'" />
</template>

<script setup>
import { reactive, ref } from "vue";
import MarkdownRenderer from "@/components/MarkdownRenderer.vue"


</script>
<style lang="scss">

</style>

打包报错

执行pnpm run build 出现如下异常

lua

 代码解读
复制代码src/components/MarkdownRenderer.vue:9:32 - error TS7016: Could not find a declaration file for module 'markdown-it-footnote'. '/Users/markxrrl/workspace-product/code/flowable-vue3/node_modules/markdown-it-footnote/index.js' implicitly has an 'any' type.

出错原因
原因是: ‘vue-xxx’文件可能不是.ts文件而是.js文件

解决方法:
在目录src中创建shims-vue.d.ts文件

sql 代码解读复制代码declare module 'markdown-it-anchor'
declare module 'markdown-it-abbr'
declare module 'markdown-it-footnote'
declare module 'markdown-it-sub'
declare module 'markdown-it-sup'
declare module 'markdown-it-task-lists'
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值