附cherry-markdown官网及api使用示例
官网:https://github.com/Tencent/cherry-markdown/blob/main/README.CN.md
api:Cherry Markdown API
考虑到复用性,我在插件的基础上做了二次封装,步骤如下:
1.下载 (一定要指定版本0.8.22,否则会报错: [vitel Internal server error: Failed to parse soERRORrce for import analysis because the content contains invalid Js syntax. If you are using JSX, make sure to name the file with the...)
npm i cherry-markdown@0.8.22
如果需要开启 mermaid
画图、表格自动转图表功能,需要同时添加mermaid
与echarts
包。
目前Cherry推荐的插件版本为echarts@5.3.3
、mermaid@9.4.3
# 安装mermaid依赖开启mermaid画图功能
npm i mermaid@9.4.3
# 安装echarts依赖开启表格自动转图表功能
npm i echarts@5.3.3
基础应用代码示例
<template><div @click.prevent.stop><div id="markdown-container"></div></div>
</template><script>
import 'cherry-markdown/dist/cherry-markdown.css';
import Cherry from 'cherry-markdown';
const cherryInstance = new Cherry({id: 'markdown-container',value: '# welcome to cherry editor!',
});
</script>
关于 mermaid(插件注册必须在Cherry实例化之前完成)
核心构建包不包含 mermaid 依赖,需要手动引入相关插件。
import 'cherry-markdown/dist/cherry-markdown.css';
import Cherry from 'cherry-markdown/dist/cherry-markdown.core';
import CherryMermaidPlugin from 'cherry-markdown/dist/addons/cherry-code-block-mermaid-plugin';
import mermaid from 'mermaid';// 插件注册必须在Cherry实例化之前完成
Cherry.usePlugin(CherryMermaidPlugin, {mermaid, // 传入mermaid引用// mermaidAPI: mermaid.mermaidAPI, // 也可以传入mermaid API// 同时可以在这里配置mermaid的行为,可参考mermaid官方文档// theme: 'neutral',// sequence: { useMaxWidth: false, showSequenceNumbers: true }
});const cherryInstance = new Cherry({id: 'markdown-container',value: '# welcome to cherry editor!',
});
2.附上组件代码
<template><div @click.prevent.stop style="position: relative; width: 100%; height: 100%; z-index: 9999999999;text-align: left;"><!-- ------- markdown组件容器 --------- --><div ref="markdownContainerRef" :id="mdId" class="cherry_container scroll":style="{ 'left': toc_Visiable ? '262px' : '0px' }" @scroll="onScroll"></div><!-- ------- 显示目录 --------- --><!-- <div class="toc_container" v-show="toc_Visiable"><div class="toc_header">目录</div><div class="toc_list"><div v-for="(link, index) in toc_List" :key="link.id" class="toc_list_container":style="{ 'padding-left': link.level * 20 + 'px' }" @click="jump(index)">{{ link.text }}</div></div></div><div class="top-contrl"><div v-if="!toc_Visiable" @click="showToc(true)">显示目录</div><div v-else @click="showToc(false)">隐藏目录</div></div> --></div>
</template><script setup>
import { ref, onMounted, onBeforeMount, watch, onBeforeUnmount, toRefs, reactive, nextTick } from 'vue';
import Axios from 'axios';
import 'cherry-markdown/dist/cherry-markdown.css';
import Cherry from 'cherry-m