当前位置:首页 » 《随便一记》 » 正文

如何在前端vue3中处理markdown并使用样式和代码高亮

28 人参与  2024年11月13日 08:41  分类 : 《随便一记》  评论

点击全文阅读


如何在前端vue3中处理markdown并使用样式和代码高亮

因为想要在前端实现实时渲染markdown,发现找不到对应的处理。搜了很久,终于找到了需要的方法,在这里分享一下

最终效果展示:
在这里插入图片描述

在前端vue3中处理markdown

读取markdown为string文本,然后通过最后markdown-it包转成markdown文件。

markdown-it | markdown-it 中文文档 (docschina.org)

安装依赖:

npm install markdown-it --save

用法:script setup中

import MarkdownIt from 'markdown-it'md = new MarkdownIt();var result = md.render('# markdown-it rulezz!'); //传入文本

template中直接用v-html绑定:

  <div v-html="result"></div>

最终在页面显示:

在这里插入图片描述

此时会发现如果有代码的话,代码框没有样式,也没有高亮

导入一些其他的样式应该也是可以的,只需要看文件是怎么用引入的就行

给markdown添加样式

sindresorhus/github-markdown-css:复制 GitHub Markdown 样式的最小 CSS 数量

可以添加GitHub的markdown样式

npm install github-markdown-css

引入依赖:

import 'github-markdown-css';

在生成显示markdown的标签加上对应的class:

  <div v-html="item.content" class="markdown-body" style="font-size: small"></div>

可以根据需求引入官方这个:

<style>.markdown-body {box-sizing: border-box;min-width: 200px;max-width: 980px;margin: 0 auto;padding: 45px;}@media (max-width: 767px) {.markdown-body {padding: 15px;}}</style>

然后发现有样式了,但是没有代码高亮

所以还需要加一点东西

wooorm/starry-night: Syntax highlighting, like GitHub

starry-night会生成基于代码高亮的html的hast 树或者css样式,以及自定义语法,具体可以看官方文档。

syntax-tree/hast-util-to-html:将 hast 序列化为 HTML 的实用程序 (github.com)

hast-util-to-html将html的hast 树转成HTML的工具。

两者的结合可以生成高亮的代码html文本

安装依赖:

npm install @wooorm/starry-night
npm install hast-util-to-html

官方示例:

import fs from 'node:fs/promises'import {common, createStarryNight} from '@wooorm/starry-night'import {toHtml} from 'hast-util-to-html'import markdownIt from 'markdown-it'const file = await fs.readFile('example.md')const starryNight = await createStarryNight(common)const markdownItInstance = markdownIt({  highlight(value, lang) {    const scope = starryNight.flagToScope(lang)    return toHtml({      type: 'element',      tagName: 'pre',      properties: {        className: scope          ? [              'highlight',              'highlight-' + scope.replace(/^source\./, '').replace(/\./g, '-')            ]          : undefined      },      children: scope        ? /** @type {Array<ElementContent>} */ (            starryNight.highlight(value, scope).children          )        : [{type: 'text', value}]    })  }})const html = markdownItInstance.render(String(file))console.log(html)

在代码中使用上就有一开始所介绍的效果了。

怎么实时显示流输出的markdown文本数据

可以看一下我写的这篇文章,说得很详细,有我本人写的具体实现:
vue3前端使用ollama搭建本地模型处理流并实时生成markdown-CSDN博客


点击全文阅读


本文链接:http://m.zhangshiyu.com/post/185376.html

<< 上一篇 下一篇 >>

  • 评论(0)
  • 赞助本站

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

最新文章

  • 经年离歌愁未休现已上架(顾允廷宋卿落)_经年离歌愁未休现已上架(顾允廷宋卿落)
  • 盛景太匆匆+后续+结局(宁若曦沈砚舟黎思)结局_宁若曦沈砚舟黎思+结局列表_笔趣阁(盛景太匆匆+后续+结局)
  • 全书浏览无端却被春风误完结爽文(孟南汐宋祁钰)_无端却被春风误完结爽文(孟南汐宋祁钰)全书结局
  • 爱意如风散尽时全书+后续+结局免费全书_许栀林远舟_笔趣阁(爱意如风散尽时全书+后续+结局)
  • [结婚七年,老婆一直守身如玉]完结版全文_周寒声顾州免费试读
  • 全文无端却被春风误全书+后续(孟南汐宋祁钰)_(全文无端却被春风误全书+后续)孟南汐宋祁钰列表(全文无端却被春风误全书+后续)
  • 此去经年人未还霍沉洲全书+结局沈青禾霍沉洲_此去经年人未还霍沉洲全书+结局列表_笔趣阁沈青禾霍沉洲
  • 皇帝决定选择穿越女后,皇后娘娘登基了孟承霄穆清越沈织桐完本_皇帝决定选择穿越女后,皇后娘娘登基了(孟承霄穆清越沈织桐)
  • 无端却被春风误全面完结列表_无端却被春风误全面完结(孟南汐宋祁钰)
  • 潮起时问归期江以蓁陆临深完本_潮起时问归期(江以蓁陆临深)
  • 全书浏览陪嫁五百亿,不嫁港圈嫁京圈+后续+结局(封清凝闻谦白静姝)_陪嫁五百亿,不嫁港圈嫁京圈+后续+结局(封清凝闻谦白静姝)全书结局
  • 潮起时问归期爆火全网(江以蓁陆临深)_潮起时问归期爆火全网

    关于我们 | 我要投稿 | 免责申明

    Copyright © 2020-2022 ZhangShiYu.com Rights Reserved.豫ICP备2022013469号-1