vue3中使用prismjs或者highlight.js实现代码高亮

目录

前言

一、prismjs和highlight.js

prismjs使用 

1.安装依赖

2.配置vite.config.js 

 3.html使用

4.额外扩展

highlight使用 

1.安装依赖

2.在main.js中引入,官方为我们提供了vue到插件

3.css行数样式自定义

4.html中使用

二、总结 


 我的博客原文:https://code-nav.top/article/308

前言

最近忙着开发自己的博客系统,在做界面展示的时候,需要让代码高亮,于是经过在网上查阅,发现有两款比较好用的插件实现代码高亮,分别是prismjs和highlight.js,下面我分别介绍下,方便给需要的同学参考。

一、prismjs和highlight.js

prismjs使用 

prismjs官网链接

1.安装依赖

//安装prismjs 插件
npm install prismjs -S

// vite
npm install vite-plugin-prismjs -D

2.配置vite.config.js 

import { prismjsPlugin } from 'vite-plugin-prismjs';
export default defineConfig({
	plugins: [
    	vue(),
    	prismjsPlugin({
      		languages: 'all', // 语言
      		plugins: ['line-numbers', 'copy-to-clipboard'], //官网有其他功能,这里开启行数和复制按钮功能
      		theme: 'okaidia', // 主题
      		css: true,
    	}),
  ],
})

参数解读:

  • line-numbers 显示行数
  • language 显示语言
  • copy-to-clipboard 复制功能
  • inline-color 代码中显示颜色块

 3.html使用

 设置语言只需要在class="language-语言",比如如下js设置language-js即可

<template>
  <pre><code class="language-js line-numbers">{{ codes }}</code></pre>
</template>

<script lang="ts">
import { defineComponent } from 'vue';
import Prism from 'prismjs';
export default defineComponent({
  name: 'HtmlRender',
  setup() {
    onMounted(() => {
      Prism.highlightAll(); // 切换更新内容则重新调用这个方法
    });
  }
});
</script>

注意: pre 和 code 写在同一行(不然行号会错乱)

效果图:

4.额外扩展

如果你想用Mac分格的样式,则需要自定义pre样式,如下是我自己的,大家可做参考:

pre {
    overflow: hidden !important;
    code{ 
        display: inline-block;
        padding-bottom: 20px;
        position: relative;
        top: 20px;
    }
    &::before {
        content: "";
        position: absolute;
        background: red;
        width: 10px;
        height: 10px;
        border-radius: 50%;
        top: 10px;
        left: 15px;
        transform: translate(-50%);
    }
    &::after {
        content: "";
        position: absolute;
        background: sandybrown;
        width: 10px;
        height: 10px;
        border-radius: 50%;
        top: 10px;
        left: 30px;
        transform: translate(-50%);
    }
    code:first-child{
        &::after{
            content: "";
            position: absolute;
            background: limegreen;
            width: 10px;
            height: 10px;
            border-radius: 50%;
            top: -24px;
            left: -7px;
            transform: translate(-50%);
        }
    }
}

如果你到了这一步,那代表你使用prismjs实现的的代码块样式功能完美实现啦!恭喜恭喜! 

highlight使用 

1.安装依赖

npm install highlight.js --save 或 yarn add highlight.js

2.在main.js中引入,官方为我们提供了vue到插件

// highlight 的样式,依赖包,组件
import hljs from "highlight.js";
import "highlight.js/styles/github.css";

const app = createApp(App);
app.use((app) => {
    app.directive("highlight", {
      mounted(el) {
        const blocks = el.querySelectorAll("pre code"); // querySelectorAll可以根据自己的富文本生成的代码做调整 我这里默认刚好
        blocks.forEach((block: any) => {
          // 在forEach中做一些操作
          // 1.创建ul节点
          const ul = document.createElement("ul");
          // 2.根据换行符获取行数,根据获取的行数生成行号
          const rowCount = block.outerHTML.split("\n").length;
          for (let i = 1; i <= rowCount; i++) {
            //创建li节点,创建文本节点
            const li = document.createElement("li");
            const text = document.createTextNode(String(i));
            //为li追加文本节点,将li加入ul
            li.appendChild(text);
            ul.appendChild(li);
          }
          // 3.给行号添加类名
          ul.className = "pre-numbering";
          // 4.将ul节点加到 代码块
          block.parentNode.appendChild(ul);
          hljs.highlightBlock(block);
        });
      },
    });
  })
  .mount("#app");

3.css行数样式自定义

我们对显示行数做了扩展,css如下 

pre {
  position: relative;
  background-color: #fafafa;
  font-size: 14px;
  padding: 8px 8px 0px 8px;
  overflow: hidden;
  border: 1px solid #ccc;
}

code.hljs {
  background-color: #fafafa !important;
  line-height: 22px;
  padding: 0 0 0.5em 2.2em !important;
  white-space: unset;
}

.pre-numbering {
  position: absolute;
  top: 8px;
  left: 0;
  width: 30px;
  border-right: 1px solid #c5c5c5;
  background-color: #fafafa;
  text-align: center;
  line-height: 22px;
}

.pre-numbering li {
  list-style: none;
  color: #383a42;
  font-size: 14px;
}

行数以及背景显示样式可以根据自己的需求自定义

注意点: 

设置行数样式中,有人反应高亮的代码死活就是错位显示,正常没有库样式覆盖pre参照以上样式基本没问题,如果引入其他css库覆盖可能是pre下面的code设置了white-space: pre-wrap;换行导致错位展示问题,重点排查样式覆盖问题。

4.html中使用

<highlightjs language='javascript' code="var x = 5;" />

样式效果查看  

如果你到了这一步,那代表你使用highlight实现的代码块样式功能完美实现啦!恭喜恭喜!

二、总结 

prismjs和highlight.js两个插件感觉都很不错,个人比较喜欢prismjs,当然萝卜青菜各有所爱,大家根据自己的爱好选择即可。用户体验度又上升啦!YYDS!欢迎在评论区交流。

如果文章对你有所帮助,❤️关注+点赞❤️鼓励一下!博主会持续更新。。。。

功能在线体验以及原文链接:https://code-nav.top/article/308

往期回顾

 vue中粘贴板clipboard的使用方法

 vue3使用i18n 实现国际化

图片懒加载vue3-lazy

Vite4.2 +Vue3.2+Less实现主题切换功能

vue3.x使用prerender-spa-plugin预渲染达到SEO优化

  • 49
    点赞
  • 33
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 13
    评论
### 回答1: 在 Vue 项目使用 Rainbow.js 实现代码高亮展示的步骤如下: 1. 安装 Rainbow.js:在命令行运行 npm install rainbow-js --save 2. 在 main.js 引入 Rainbow.js:import Rainbow from 'rainbow-js' 3. 在需要高亮代码的组件,通过 Rainbow.color() 方法来高亮代码。如: ``` <template> <pre> <code class="javascript" ref="code">{{ code }}</code> </pre> </template> <script> export default { data() { return { code: `console.log('Hello, Rainbow.js!')` } }, mounted() { Rainbow.color(this.$refs.code, 'javascript') } } </script> ``` 在上面的代码, 这个组件包含一个 <code> 标签,将其绑定到 ref ,并将其作为参数传递给 Rainbow.color() 方法,该方法的第二个参数是语言类型,在这里是 JavaScript。 ### 回答2: 在Vue项目使用Rainbow.js可以实现代码高亮展示。首先,我们需要在项目安装Rainbow.js。可以通过npm或yarn安装Rainbow.js依赖,并在需要使用代码高亮的组件引入Rainbow.js的脚本文件。 在Vue组件,我们可以通过以下步骤来使用Rainbow.js进行代码高亮展示: 1. 在Vue组件的`mounted`生命周期钩子函数,获取需要高亮展示的代码块的DOM节点。 2. 使用Rainbow.js提供的`highlight`函数,传入代码节点作为参数,可以将其内容进行高亮处理。 3. 通过自定义样式文件或者直接使用Rainbow.js提供的默认样式,对高亮后的代码样式进行美化。 4. 将高亮后的代码显示在页面上。 以下是一个示例代码,演示了如何在Vue项目使用Rainbow.js实现代码高亮展示: ```vue <template> <div> <pre> <code ref="code">{{ code }}</code> </pre> </div> </template> <script> import Rainbow from 'rainbow-js'; export default { data() { return { code: ` function greet(name) { console.log('Hello, ' + name + '!'); } greet('Vue'); `, }; }, mounted() { Rainbow.color(this.$refs.code); }, }; </script> <style> /* 可以自定义样式或使用Rainbow.js提供的默认样式 */ </style> ``` 在上面的示例,我们首先在`mounted`钩子函数获取了`<code>`标签对应的DOM节点,然后使用`Rainbow.color`函数对其内容进行高亮处理。最后,我们可以根据需要设置自定义样式或直接使用Rainbow.js提供的默认样式,用于展示高亮后的代码。 这样,我们就成功地在Vue项目使用Rainbow.js实现代码高亮展示。 ### 回答3: 在Vue项目使用Rainbow.js实现代码高亮展示可以按照以下步骤进行操作。 首先,我们需要在Vue项目引入Rainbow.js。可以选择通过CDN引入,也可以通过npm安装Rainbow.js包并引入。这里我们以npm安装为例。 1. 在命令行使用以下命令安装Rainbow.js: ``` npm install rainbow-code ``` 2. 在Vue组件的script标签引入Rainbow.js: ```javascript import Rainbow from 'rainbow-code'; ``` 3. 在Vue组件的mounted生命周期钩子,初始化Rainbow.js并进行代码高亮设置: ```javascript mounted() { Rainbow.color(); } ``` 4. 在Vue模板使用<pre>标签包裹需要高亮展示的代码,并添加class属性为"rainbow": ```html <pre class="rainbow"> <code> <!-- 在这里插入需要展示的代码 --> </code> </pre> ``` 5. 在Vue组件的styles引入Rainbow的css样式文件: ```css @import 'rainbow-code/themes/github.css'; ``` 6. 在Vue项目的构建过程,确保CSS样式文件可以正确地被加载和解析。 通过以上步骤的操作,我们就可以在Vue项目使用Rainbow.js实现代码高亮展示了。可以根据需要,在Rainbow.color()传入具体的语言配置,使得代码高亮的效果更加准确和丰富。同时,我们也可以根据自己的需求,自定义Rainbow的样式文件,使得代码高亮展示更符合项目的整体风格。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

富朝阳

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值