marked库(高效将 Markdown 转换为 HTML 的利器)

文章目录

前言

最近尝试了一下通过星火大模型将ai引入到项目上,但是ai返回的数据可以显而易见的发现是markedown语法的,那么就需要一个工具,将类似这种的格式转换为markdown格式

Marked 是一个用 JavaScript 编写的开源库,专注于把 Markdown 格式的文本解析并转换为 HTML。它广泛应用于各类 Web 应用程序、文档生成工具、博客系统等场景中,实现 Markdown 到 HTML 的顺畅转换

然后我就搜索到了marked这个包,

使用

基本使用

官网
安装
npm install marked

每个页面引入如果是marked 那么所有页面的设置将会通用

javascript 复制代码
import { marked } from 'marked';
// or const { marked } = require('marked');

const html = marked.parse('# Marked in Node.js\n\nRendered by **marked**.');

如果想要创建独立的marked

javascript 复制代码
import { Marked } from 'marked';
const marked = new Marked([options, extension, ...]);

使用

javascript 复制代码
//markdownString:要解析的markdown,必须为字符串
//options:marked.js的配置
marked.parse(markdownString [,options])

options

自定义渲染器

自定义渲染器可以把解析后形成的数据再次进行二次修改

javascript 复制代码
const renderer = new marked.Renderer();

渲染器方法:

例子

javascript 复制代码
renderer.heading = (data) => {
  const { raw, text, depth } = data;
  console.log(text, depth);
  console.log()

  // 将一级标题转换为h1标签
  if (depth === 1) {
    return `<h1 class="hClass"> ${text}</h1>`;
  } else if (depth === 2) {
    return `<h2 class="hClass">${text}</h2>`;
  } else if (depth === 3) {
    return `<h3 class="hClass">${text}</h3>`;
  } else if (depth === 4) {
    return `<h4 class="hClass">${text}</h4>`;
  } else if (depth === 5) {
    return `<h5 class="hClass">${text}</h5>`;
  } else if (depth === 6) {
    return `<h6 class="hClass">${text}</h6>`;
  }
};
renderer.html = (html) => {
  console.log(html);
  const { text } = html;
  return `<div class="htmlClass">${text}</div>`;
};
marked.use(renderer);

当渲染到页面上时

代码高亮

在markedown中是不可避免有代码块的,但是markedown返回的数据并不会想当然的带上样式,我们需要自己进行设置

javascript 复制代码
npm i highlight.js
npm i github-markdown-css

在main.js中写一个全局自定义指令

javascript 复制代码
import hljs from "highlight.js";
import "github-markdown-css";
import "highlight.js/styles/atom-one-dark.css";
 
Vue.directive("highlight", function (el) {
  let blocks = el.querySelectorAll("pre code");
  blocks.forEach((block) => {
    hljs.highlightBlock(block);
  });
});

如果想要改变一些样式的话 定义一个markdown样式 这里我叫做 markedown-body

javascript 复制代码
.markdown-body {
  font-family: Helvetica Neue, Helvetica, PingFang SC, Hiragino Sans GB,
    Microsoft YaHei, Arial, sans-serif !important;
  line-height: 20px;
  & ul {
    list-style: none;
    padding-left: 20px;
  }
  color: #000 !important;
  p {
    margin-top: 10px !important;
    margin-bottom: 10px !important;
  }
  pre {
    padding: 5px !important;
    margin-bottom: 10px !important;
  }
  .hljs {
    color: #abb2bf;
    background: #282c34;
  }
  .hClass {
    //出现#则不转换为h1等标签
    font-size: 16px;
    color: #8a2328;
    font-weight: 600;
    margin: 10px 0;
  }
  /* 只改变普通 code 标签的颜色,不影响 pre 中的 code */
  code:not(pre) {
    color: red;
    font-weight: 600;
    background-color: rgba(175, 184, 193, 0.3);
    margin: 0 5px;
  }

  a {
    color: #1d71f7 !important;
  }
}
相关推荐
Laravel技术社区7 小时前
用PHP8实现斗地主游戏,实现三带一,三带二,四带二,顺子,王炸功能(第二集)
前端·游戏·php
m0_738120728 小时前
应急响应——知攻善防Web-3靶机详细教程
服务器·前端·网络·安全·web安全·php
程序员爱钓鱼15 小时前
Node.js 编程实战:文件读写操作
前端·后端·node.js
PineappleCoder15 小时前
工程化必备!SVG 雪碧图的最佳实践:ID 引用 + 缓存友好,无需手动算坐标
前端·性能优化
JIngJaneIL16 小时前
基于springboot + vue古城景区管理系统(源码+数据库+文档)
java·开发语言·前端·数据库·vue.js·spring boot·后端
敲敲了个代码16 小时前
隐式类型转换:哈基米 == 猫 ? true :false
开发语言·前端·javascript·学习·面试·web
澄江静如练_16 小时前
列表渲染(v-for)
前端·javascript·vue.js
JustHappy17 小时前
「chrome extensions🛠️」我写了一个超级简单的浏览器插件Vue开发模板
前端·javascript·github
Loo国昌17 小时前
Vue 3 前端工程化:架构、核心原理与生产实践
前端·vue.js·架构