vue中使用Marked实现预览md文件(base64编码图片)

news2024/11/21 1:37:53

vue中使用Marked实现预览md文件(base64编码图片)

在上一篇vue-markdown实现预览md文件时,后端返回的图片格式是base64格式的,试了很多方法都不能显示,因此换成了marked插件进行预览,同时也支持显示大纲目录。
上一篇传送门:https://blog.csdn.net/m0_59415345/article/details/140495057?spm=1001.2014.3001.5501

marked 介绍

  • Marked 是一个高性能的 Markdown 解析器和编译器,专为速度优化而设计;
  • 它是一个底层的 Markdown 编译器,能够在不依赖缓存或长时间阻塞的情况下解析 Markdown 文档;
  • Marked仍然保持轻量级,使其既适用于浏览器环境,也适用于服务器端或通过命令行界面(CLI)运行;
  • 广泛兼容性:实现了来自支持的Markdown风格和规范的所有特性,包括原始Markdown、CommonMark和GitHub Flavored Markdown等。
  • 安全性注意事项:Marked生成的HTML输出不包含自动净化功能,因此在处理不可信的Markdown输入时,建议使用DOMPurify、sanitize-html等库来防止XSS攻击。

marked官方文档:https://marked.js.org/

marked的在线示例:https://spec.commonmark.org/dingus/
如果不确定md内容能否展示的,可以先在这上面试运行一下,如果可以显示再使用该插件,不然就换插件,节省开发时间。

一、实现预览

1、安装marked

npm install marked --save

2、引入

这里不多哔哔,直接上代码,我的版本是0.8.0,版本不同配置项也不同,需要根据自己的版本确定配置项。

<template>
  <div>
    <div id="content"  class="api-content" v-html="markdownContent"></div>
  </div>
</template>

<script>
import { marked } from "marked";
export default {
  data() {
    return {
      markDownSrc:'',//后端获取的md文件链接
      markdownContent: '',
    };
  },
  mounted() {
	this.loadMarkdownFile();
  },
  methods: {
      async loadMarkdownFile() {
			try {
                //从链接中获取md文件内容
				const response = await fetch(this.markDownSrc);
				const markdownText = await response.text();
				var rendererMD = new marked.Renderer();
                //进行配置
				marked.setOptions({
					renderer: rendererMD,
					pedantic: false,
					gfm: true,
					tables: true,
					breaks: false,
					sanitize: false,
					smartLists: true,
					smartypants: false,
					xhtml: false
				});
				this.markdownContent = marked(markdownText); // 将markdown内容解析
			} catch (error) {
				console.error('Failed to load the Markdown file:', error);
				this.$message.error('文档解析错误!');
			}
		},
  }
};
</script>

<style></style>

3、常用配置项

配置名类型默认值版本说明
asyncbooleanfalse4.1.0如果为 true,则函数可以是异步的,并将返回一个 promise,当所有遍历令牌函数解析时,该 promise 将解析。walkTokens``marked.parse
breaksbooleanfalse0.2.7 版如果为 true,则添加单个换行符(复制注释的 GitHub 行为,但不复制呈现的 Markdown 文件)。要求是 .<br>``gfm``true
gfmbooleantrue0.2.1 版如果为 true,请使用已批准的 GitHub Flavored Markdown (GFM) 规范。
pedanticbooleanfalse0.2.1 版如果为真,则尽可能符合原文。不要修复原始的 Markdown 错误或行为。关闭并覆盖 。markdown.pl``gfm
rendererobjectnew Renderer()0.3.0 版一个对象,包含用于将标记呈现为 HTML 的函数。有关详细信息,请参阅扩展性。
silentbooleanfalse0.2.7 版如果为 true,则分析器不会引发任何异常或记录任何警告。任何错误都将以字符串形式返回。
tokenizerobjectnew Tokenizer()1.0.0 版一个对象,包含用于从 Markdown 创建令牌的函数。有关详细信息,请参阅扩展性。
walkTokensfunctionnull1.1.0 版为每个令牌调用的函数。有关详细信息,请参阅扩展性。

旧配置项

配置名类型默认值版本说明
smartLists(已删除)booleanfalse0.2.8 版在 v3.0.0 中删除。
baseUrl(已删除)stringnull0.3.9 版在 v8.0.0 中删除了使用 marked-base-url 为任何相对链接添加前缀 url。
headerIds(已删除)booleantrue0.4.0 版在 v8.0.0 中删除了在发出标题(h1、h2、h3 等)时使用 marked-gfm-heading-id 包含属性。id
headerPrefix(已删除)string''0.3.0 版在 v8.0.0 中删除了在发出标题(h1、h2、h3 等)时使用 marked-gfm-heading-id 添加字符串作为属性的前缀。id
突出显示(已删除)functionnull0.3.0 版在 v8.0.0 中删除了使用 marked-highlight 向代码块添加高亮显示。
langPrefix(已删除)string'language-'0.3.0 版在 v8.0.0 中删除了使用 marked-highlight 在块中为 className 添加前缀。对于语法突出显示很有用。<code>
mangle(已删除))booleantrue0.3.4 版在 v8.0.0 中移除了使用 marked-mangle 来修改电子邮件地址。
sanitize(已删除)booleanfalse0.2.1 版在 v8.0.0 中删除了使用清理库,例如 DOMPurify(推荐)、sanitize-html 或输出 HTML!
sanitizer(已删除)functionnull0.3.4 版在 v8.0.0 中删除了使用清理库,例如 DOMPurify(推荐)、sanitize-html 或输出 HTML!
SmartyPants(已删除)booleanfalse0.2.9 版在 v8.0.0 中删除了使用 marked-smartypants 对引号和破折号等内容使用“智能”排版标点符号。
xhtml(已删除)booleanfalse0.3.2 版在 v8.0.0 中删除了使用 marked-xhtml 为 void 元素(
、 等)发出带有 XHTML 要求的带有“/”的自闭 HTML 标记。

4、扩展插件

可以使用自定义扩展来扩展标记。这是可与 一起使用的扩展列表marked.use(extension)。具体插件的使用请看插件使用的方式说明。

名字软件包名称描述
Admonitionmarked-admonition-extension告诫扩展
Alertmarked-alert启用 GFM 警报
Base URLmarked-base-url在相对 URL 前加上基本 URL。
Bidimarked-bidi向 HTML 添加双向文本支持
Code Formatmarked-code-format使用 Prettier 格式化代码块
Code JSX Renderermarked-code-jsx-renderer使用自定义渲染器和组件渲染 JSX 代码块
Code Previewmarked-code-preview将代码块转换为代码预览
Custom Heading IDmarked-custom-heading-id使用 Markdown 扩展语法在标题中指定自定义标题 ID # heading {#custom-id}
Directivemarked-directive支持指令语法
Emojimarked-emoji添加表情符号支持,就像在 GitHub 上一样
Extended Tablesmarked-extended-tables扩展标准 Github-Flavored 表以支持高级功能:列跨、行跨、多行标题
Footnotemarked-footnote启用 GFM 脚注
GFM Heading IDmarked-gfm-heading-id使用 github-slugger 创建标题 ID 并允许自定义前缀。
Highlightmarked-highlight突出显示代码块
Katex Codemarked-katex-extension渲染 katex 代码
LinkifyItmarked-linkify-it将 linkify-it 用于 urls
Manglemarked-mangle带有 HTML 字符引用的 Mangle mailto 链接
Misskey-flavored Markdownmarked-mfmMisskey 风味 Markdown 的自定义扩展。
Plaintifymarked-plaintify将 Markdown 转换为明文
Shikimarked-shiki集成 Shiki 语法高亮
Sequential Hooksmarked-sequential-hooks在顺序钩子中启用顺序预处理和后处理
Smartypantsmarked-smartypants使用 smartypants 对引号和破折号等内容使用“智能”排版标点符号。
Smartypants litemarked-smartypants-lite一个更快、更轻量级的标记智能裤子版本,它不使用任何外部依赖项来为引号和破折号等内容创建“智能”排版标点符号。
XHTMLmarked-xhtml根据 XHTML 的要求,为 void 元素(
、 等)发出带有“/”的自闭合 HTML 标记。

二、代码高亮

如果需要配置代码高亮,需要安装highlight.js,下面介绍一下如何使用。

1、安装highlight.js

npm install highlight.js --save

2、在配置项中引入

import highlight from 'highlight.js'; // 引入 highlight.js
//在marked.setOptions中添加该项配置
highlight: function (code) {
	return highlight.highlightAuto(code).value;
},

注意:

如果marked的版本太高,运行时会出现Bable异常的情况,我导入了很多loader都没用。如果出现这个情况,可以通过降低marked的版本解决,需要注意的是,有些配置根据版本已删除。安装插件时,请关注marked的版本与插件版本是否适配,如果不适配项目也会报错。

三、效果展示

注意:

如果marked的版本太高,运行时会出现Bable异常的情况,我导入了很多loader都没用。如果出现这个情况,可以通过降低marked的版本解决,需要注意的是,有些配置根据版本已删除。安装插件时,请关注marked的版本与插件版本是否适配,如果不适配项目也会报错。

三、效果展示

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1954626.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

入门 PyQt6 看过来(案例)12~ 列表增删排序

本文介绍如何实现列表增加删除和排序的功能&#xff0c;效果如下&#xff1a; 1 页面设计 1.1 列表 #列表数据self.list [福宝, 萌兰, 金虎,蓝天]# 创建四行一列标准数据模型self.modeQStandardItemModel(4,1)# 将数据中的列表项作为标准数据模型输出for i in range(self.mod…

17.延迟队列

介绍 延迟队列&#xff0c;队列内部是有序的&#xff0c;延迟队列中的元素是希望在指定时间到了以后或之前取出和处理。 死信队列中&#xff0c;消息TTL过期的情况其实就是延迟队列。 使用场景 1.订单在十分钟内未支付则自动取消。 2.新创建的店铺&#xff0c;如果十天内没…

tomat 启动项目请求中文乱码 日志乱码

tomat 启动项目请求中文乱码 日志乱码 tomat 启动项目请求中文乱码 日志乱码检查tomcat编码检查项目编码检查服务器编码修改catalina.bat 测试 tomat 启动项目请求中文乱码 日志乱码 项目部署后 请求信息中文乱码 {""address":"娴嬭瘯", "Prov…

【Django】ajax和django接口交互(获取新密码)

文章目录 一、需求1. 效果图 二、实验1. 写get接口后端2. 写html后端3. 写前端4. 测试 一、需求 1. 效果图 二、实验 1. 写get接口后端 写views import string import random def getnewpwd(request):words list(string.ascii_lowercasestring.ascii_uppercasestring.digi…

C# form的移植工作

前言&#xff1a; 目标&#xff0c;将一个项目的form移植到新的工程下&#xff0c;且能够正确编译执行&#xff1a; 1 Copy form的两个文件到新工程下&#xff1a; 比如笔者的logo form 2 修改命名空间&#xff1a; 然后&#xff0c;找到新项目的主程序&#xff1a; 的命名…

Hive3:Hive初体验

1、创建表 CREATE TABLE test(id INT, name STRING, gender STRING);2、新增数据 INSERT INTO test VALUES(1, 王力红, 男); INSERT INTO test VALUES(2, 钉钉盯, 女); INSERT INTO test VALUES(3, 咔咔咔, 女);3、查询数据 简单查询 select * from test;带聚合函数的查询 …

vue2和el-input无法修改和写入,并且不报错

文章目录 一. 业务场景描述二. 原因分析三.解决方案3.1 方案一 原生标签&#xff08;不建议&#xff09;3.2 方案二 父子传递&#xff08;不建议&#xff09;3.3 方案三 vuex&#xff0c;pinia 状态传值&#xff08;不建议&#xff09;3.4 方案四 vue初始化属性 &#xff08;建…

C语言程序设计之链表篇1

程序设计之链表1 链表问题1_1代码1_1结果1_1 问题1_2代码1_2结果1_2 问题1_3代码1_3结果1_3 链表 考查链表的数据结构&#xff0c;需利用指针变量才能实现&#xff0c;一个结点中应包含一个指针变量&#xff0c;用来存放下一个结点的地址。 建立单向链表的一般步骤是&a…

Ubuntu上安装anaconda创建虚拟环境(各种踩坑版)

之前都是在Windows桌面版进行深度学习的环境部署及训练&#xff0c;今天尝试了一下在Ubuntu上进行环境部署&#xff0c;踩了不少坑&#xff0c;提供一些解决办法给大家避雷。 目录 一、下载和安装anaconda 1. 下载 2. 安装 二、创建虚拟环境 一、下载和安装anaconda 1. …

项目管理工具-Maven

文章目录 Maven概述俩个经典的作用Maven 仓库 Maven 常用命令Maven 指令的生命周期Maven 的概念模型Maven 工程的认识 Maven概述 Maven 是一个项目管理工具&#xff0c;它包含了一个项目对象模型 (POM&#xff1a;Project Object Model)&#xff0c;一组标准集合&#xff0c;一…

记录一次Linux服务器被人使用SSH字典爆破

2024年1.20凌晨睡了一觉&#xff0c;早上起来用termux远程ssh登录小主机发现密码没法登录了&#xff0c;一直显示密码错误&#xff0c;到了晚上用电脑ssh连接小主机&#xff0c;发现小主机真的没法登录了&#xff0c;直接把小主机接上屏幕查看&#xff0c;发现密码被人修改了&a…

什么是Socket、Socket在Java中的应用、Socket和SocketChannel区别

目录 什么是Socket TCP\IP UDP体系结构 Socket和TCP\IP的关系 Socket在Java中的应用 Socket和SocketChannel的区别 SocketChannel和Selector的关系 服务器的设计演化历程---多线程版 服务器的设计演化历程---线程池版 服务器的设计演化历程---Selector版 参考链接 什么…

深度学习loss

pytorch模型训练demo代码 在PyTorch中&#xff0c;模型训练通常涉及几个关键步骤&#xff1a;定义模型、定义损失函数、选择优化器、准备数据加载器、编写训练循环。以下是一个简单的PyTorch模型训练演示代码&#xff0c;该代码实现了一个用于手写数字识别&#xff08;使用MNIS…

大数据——HBase原理

摘要 HBase 是一个开源的、非关系型的分布式数据库系统&#xff0c;主要用于存储海量的结构化和半结构化数据。它是基于谷歌的 Bigtable 论文实现的&#xff0c;运行在 Hadoop 分布式文件系统&#xff08;HDFS&#xff09;之上&#xff0c;并且可以与 Hadoop 生态系统的其他组…

线程与进程的区别与联系,线程状态的切换

目录 什么是线程&#xff1f;进程&#xff1f;协程&#xff1f; 线程和进程的区别&#xff1f; 多线程的好处&#xff1a; 单核CPU有没有必要上多线程&#xff1f; 为什么没有变成单进程多线程的操作系统&#xff1f; 线程的状态 sleep &#xff08;&#xff09; 和wait&…

1.4 操作系统结构

操作系统的体系结构&#xff1a;操作系统的内核设计&#xff08;本节内容简要了解即可&#xff09; 宏内核 & 微内核 操作系统的内核 计算机系统的层次结构将操作系统部分更详细地划分为内核部分和非内核部分 宏内核 & 微内核 从操作系统的内核架构来划分&#xff…

【初阶数据结构篇】时间(空间)复杂度

文章目录 算法复杂度时间复杂度1. 定义2. 表示方法3. 常见时间复杂度4.案例计算分析冒泡排序二分查找斐波那契数列&#xff08;递归法&#xff09;斐波那契数列&#xff08;迭代法&#xff09; 空间复杂度案例分析冒泡排序斐波那契数列&#xff08;递归法&#xff09;斐波那契数…

【ACM独立出版,高录用】第四届物联网与机器学习国际学术会议(IoTML 2024,8月23-25)

2024年第四届物联网与机器学习国际学术会议&#xff08;IoTML 2024&#xff09;将于2024年8月23-25日在中国南昌召开。 会议将围绕着物联网和机器学习开展&#xff0c;探讨本领域发展所面临的关键性挑战问题和研究方向&#xff0c;以期推动该领域理论、技术在高校和企业的发展和…

yolov8标注细胞、识别边缘、计算面积、灰度值计算

一、数据标注 1. 使用labelme软件标注每个细胞的边界信息&#xff0c;标注结果为JSON格式 2. JSON格式转yolo支持的txt格式 import json import os import glob import os.path as osp此函数用来将labelme软件标注好的数据集转换为yolov5_7.0sege中使用的数据集:param jsonfi…

数据库技术深度解析与未来趋势展望

数据库技术深度解析与未来趋势展望 引言 在当今信息化高速发展的时代&#xff0c;数据库作为数据存储和管理的核心基础设施&#xff0c;扮演着至关重要的角色。无论是传统行业还是新兴的互联网领域&#xff0c;数据库的稳定性和性能直接影响到业务系统的运行效率和用户体验。本…