vue3初步整合highlight.js实现博客代码高亮

1,348 阅读1分钟

安装

依次安装如下两个依赖,缺一不可。

npm install --save highlight.js
npm install --save @highlightjs/vue-plugin

修改main.js

在main.js中全局引入相关依赖项。

/*黑色主题*/
import 'highlight.js/styles/atom-one-dark.css';
/*白色主题*/
// import 'highlight.js/styles/stackoverflow-light.css';
import hljs from 'highlight.js/lib/core';
// import javascript from 'highlight.js/lib/languages/javascript';
import hljsVuePlugin from "@highlightjs/vue-plugin";
// 批量引入常用语言库
import 'highlight.js/lib/common';

const app = createApp(App)

// 注意Vue2的directive是挂在Vue上的,Vue3中无法直接引入Vue但可以挂在app上
app.directive('highlight', function (el) {
    let highlight = el.querySelectorAll('pre code');
    highlight.forEach((block) => {
        // Deprecated as of 10.7.0. highlightBlock will be removed entirely in v12.0
        // Deprecated as of 10.7.0. Please use highlightElement now.
        hljs.highlightElement(block);
    })
});

app.use(hljsVuePlugin)
app.mount('#app')

要注意有的老文章中遍历时可能使用的是highlightBlock,该方法已被弃用并应该及时替换为highlightElement。

在模板中使用

在标签中加上v-highlight属性即可。注意被当作代码的文本应当被标签<pre><code>{{ value }}</code></pre>包裹。如果希望使用其他的标签,请在上节中的querySelectotAll参数中指定。

<pre v-highlight><code>{{ value }}</code></pre>

<article v-highlight v-html="article.content"></article>