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

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-itlinkify-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的版本与插件版本是否适配,如果不适配项目也会报错。

三、效果展示

在这里插入图片描述

  • 19
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值