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;
  }
}
相关推荐
广州华水科技7 分钟前
当大坝面临风险时,如何有效实施单北斗GNSS变形监测?
前端
AiMan1 小时前
Poe还是不可以导出左侧所有对话,只能单条内容导出,方法不对吗
前端
AiMan2 小时前
文心生成的内容能否下载吗?
前端
前端双越老师2 小时前
程序员 1v1 访谈系列第十四期:接受焦虑 拥抱不确定
前端·ai编程·全栈
deli0073 小时前
MCP 协议 6 条消息拆开看:AI 为什么能自己读文件调接口
前端
风骏时光牛马3 小时前
请告诉我标题对应的内容、想要的风格,我马上给你生成。
前端
deli0074 小时前
OAuth 2.0 授权码流程实测:4 次跳转,少个 state 就被劫持
前端
deli0076 小时前
手机20%突然关机?电量百分比是估的,SOC曲线4组实测
前端
深蓝AI16 小时前
Meta 开源用了八年的设计系统 astryx:连坐两天 GitHub 总榜第一,组件库开始写给 agent 的说明书
前端·人工智能