Vue3之集成Highlight.js代码语法亮显示插件

Vue3之集成Highlight.js代码语法亮显示插件

文章目录

  • Vue3之集成Highlight.js代码语法亮显示插件
  • 1.Vue3中集成说明
  • 2. 安装highlight.js与@highlightjs/vue-plugin
  • 3. Vue3集成与使用
    • 1. main.ts(或main.js)中导入highlight.js
    • 2. 各语言测试代码
    • 3. 高亮显示vue文件
    • 4. 显示效果
  • 4. Highlight.js-Vue插件详细说明
    • 1. 使用预构建的库
    • 2. 使用 ES6 模块/捆绑
    • 3. 在本地使用组件
    • 4.从源代码构建预构建库

1.Vue3中集成说明

vue中需要使用highlight.js必须借助highlightjs/vue-plugin 插件来完成

这个插件提供了一个用于Vue.js 3应用程序的组件:highlightjs

注意:vue3中highlightjs/vue-plugin的版本必须为2.x.x, 而1.x.x为vue2的适配版本

关于highlight.js说明请查看 JavaScript之Highlight.js语法高亮显示神器集成说明

2. 安装highlight.js与@highlightjs/vue-plugin

注意:highlight.js @highlightjs/vue-plugin必须都安装

pnpm install highlight.js
pnpm install @highlightjs/vue-plugin
# or
yarn add highlight.js
yarn add @highlightjs/vue-plugin
# or
npm install highlight.js
npm install @highlightjs/vue-plugin

3. Vue3集成与使用

1. main.ts(或main.js)中导入highlight.js

这里配置为按需引入语言

//引入依赖和语言
import 'highlight.js/styles/stackoverflow-light.css'
import hljs from "highlight.js/lib/core";
import hljsVuePlugin from "@highlightjs/vue-plugin";
//import "highlight.js/lib/common"; //单一加载
//按需引入语言
import javascript from "highlight.js/lib/languages/javascript";
import java from "highlight.js/lib/languages/java";
import sql from "highlight.js/lib/languages/sql";
import xml from "highlight.js/lib/languages/xml";
import html from "highlight.js/lib/languages/vbscript-html";
import json from "highlight.js/lib/languages/json";
import yaml from "highlight.js/lib/languages/json";
hljs.registerLanguage("javascript", javascript);
hljs.registerLanguage("java", java);
hljs.registerLanguage("yaml", yaml);
hljs.registerLanguage("json", json);
hljs.registerLanguage("sql", sql);
hljs.registerLanguage("xml", xml);
hljs.registerLanguage("html", html);const app = createApp(App)
app.use(hljsVuePlugin).mount('#app')

2. 各语言测试代码

CodeHighlightData.ts内容如下

export const json: string = `{"type": "object","properties": {"name": {"type": "string"},"age": {"type": "number"},"address": {"type": "object"},"phoneNumbers": {"type": "array","items": {"type": "object","properties": {"type": {"type": "string"},"number": {"type": "string"}},"additionalProperties": false}}},"additionalProperties": false
}`export const js:string = `// Using require
const hljs = require('highlight.js/lib/core');// Load any languages you need
hljs.registerLanguage('javascript', require('highlight.js/lib/languages/javascript'));
// Using ES6 import syntax
import hljs from 'highlight.js/lib/core';
import javascript from 'highlight.js/lib/languages/javascript';// Then register the languages you need
hljs.registerLanguage('javascript', javascript);`export const java:string = `package com.lab.standard.entity;import com.baomidou.mybatisplus.annotation.TableName;import java.io.Serializable;
import java.time.LocalDateTime;import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.Setter;/*** <p>* 用户反馈* </p>** @author jinshengyuan* @since 2023-01-06*/
@Getter
@Setter
@TableName("std_user_feedback")
@ApiModel(value = "反馈对象", description = "标准-用户反馈")
public class StdUserFeedback implements Serializable {private static final long serialVersionUID = 1L;private String id;@ApiModelProperty(value = "用户ID")private String userId;@ApiModelProperty(value = "用户名")private String userName;@ApiModelProperty(value = "用户姓名")private String fullName;@ApiModelProperty(value = "反馈内容")private String remarks;@ApiModelProperty(value = "反馈时间")private LocalDateTime feedbackTime;
}
`
export const xml:string = `<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.yuan.standard.mapper.StdUserFeedbackMapper"><select id="selectImageInfo" resultType="java.util.HashMap" parameterType="string">select * from v_sys_upload where bus_id=#{id} and is_del='0'</select><update id="deleteImageInfo">update v_sys_upload set is_del=1<where>id in<foreach  collection="ids" item="id" index="index"  open="(" close=")" separator=",">#{id}</foreach></where></update>
</mapper>
`export const yaml:string = `server:port: 8080servlet:context-path: /upload
spring:servlet:multipart:
#      设置最大文件max-file-size: 20MBmax-request-size: 1000MBapplication:name: yuan-upload-app`export const sql:string = ` SELECT * FROM USER WHERE ID = ?`

3. 高亮显示vue文件

CodeHighlight.vue内容如下

<template>语言:<el-select v-model="language" @change="languageChange" placeholder="Select" style="width: 240px"><el-optionv-for="item in languageOptions":key="item.value":label="item.label":value="item.value":disabled="item.disabled"/></el-select><div style="height: 100vh;width: 100vh;line-height: 30px;padding: 5px;"><!--<highlightjs language="sql" :code="code"></highlightjs>--><highlightjs :language="language" :code="code"></highlightjs></div>
</template><script setup lang="ts">
import {ref} from "vue";
import {js, json, java, sql, yaml,xml} from './CodeHighlightData.ts'//默认高亮JS代码
let code = ref(js)
let language = ref('javascript')
//语言选项
const languageOptions = [{value: 'javascript',label: 'js',},{value: 'java',label: 'Java'},{value: 'yaml',label: 'yaml',},{value: 'sql',label: 'sql',},{value: 'json',label: 'json',},{value: 'xml',label: 'xml',disabled: false,},{value: 'html',label: 'html',disabled: false,},
]/*** 语言改变事件处理函数* @param language*/
const languageChange = (language: string) => {if ('java' === language) {code.value = java} else if ('json' === language) {code.value = json} else if ('yaml' === language) {code.value = yaml} else if ('sql' === language) {code.value = sql} else if ('xml' === language) {code.value = xml} else {code.value = js}
}</script><style lang="scss" scoped></style>

4. 显示效果

在这里插入图片描述

4. Highlight.js-Vue插件详细说明

官网:highlightjs/vue-plugin: Highlight.js Vue Plugin (github.com)

此插件提供了一个组件,用于您的Vue.js 3 个应用程序:highlightjs

<div id="app"><!-- bind to a data property named `code` --><highlightjs autodetect :code="code" /><!-- or literal code works as well --><highlightjs language='javascript' code="var x = 5;" />
</div>

注意:有关版本 2 Vue.js支持,请参阅 GitHub 上的 1-stable 分支。版本 1.x.x 与 Vue.js v2 兼容;带有 Vue.js v3 的 2.x.x 版本。

1. 使用预构建的库

<link rel="stylesheet" href="/path/to/styles/default.css">
<script src="/path/to/highlight.min.js"></script>
<script src="/path/to/highlight-vue.min.js"></script>

然后只需在 Vue 中注册插件:

const app = createApp(App)
app.use(hljsVuePlugin)

2. 使用 ES6 模块/捆绑

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";hljs.registerLanguage('javascript', javascript);const app = createApp(App)
app.use(hljsVuePlugin)
app.mount('#app')

注意:插件在内部导入(但没有语言)。由于 ES6 模块的魔力,您可以将Highlight.js导入到任何地方来注册语言或配置库。Highlight.js的任何导入都引用库的同一单一实例,因此在任意位置配置库就是在任意位置配置它。highlight.js/lib/core

您也可以简单地一次加载所有“通用”语言(从 v11 开始):

import 'highlight.js/styles/stackoverflow-light.css'
import 'highlight.js/lib/common';
import hljsVuePlugin from "@highlightjs/vue-plugin";const app = createApp(App)
app.use(hljsVuePlugin)
app.mount('#app')

请注意,导入不会导入对象,因为它在内部注册通用语言,并且现代 Web 捆绑器(如)会优化未使用的导入名称。如果要自定义对象,可以像前面的示例一样导入它。highlight.js/lib/common``hljs``webpack``hljs

3. 在本地使用组件

<template><highlightjslanguage="js"code="console.log('Hello World');"/>
</template><script>
import 'highlight.js/lib/common';
import hljsVuePlugin from "@highlightjs/vue-plugin";export default {components: {highlightjs: hljsVuePlugin.component}
}
</script>

4.从源代码构建预构建库

我们使用 rollup 来构建可分发组件。dist

npm run build

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/518850.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java+SpringBoot+Vue+MySQL:农业管理新篇章

✍✍计算机毕业编程指导师 ⭐⭐个人介绍&#xff1a;自己非常喜欢研究技术问题&#xff01;专业做Java、Python、微信小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。 ⛽⛽实战项目&#xff1a;有源码或者技术上的问题欢迎在评论区一起讨论交流&#xff01; ⚡⚡ Java、…

Windows环境下搭建chatGLM-6B-int4量化版模型(图文详解-成果案例)

目录 一、ChatGLM-6B介绍 二、环境准备 1. 硬件环境 2. TDM-GCC安装 3.git安装 4.Anaconda安装 三、模型安装 1.下载ChatGLM-6b和环境准备 方式一&#xff1a;git命令 方式二&#xff1a;手动下载 2.下载预训练模型 方式一&#xff1a;在Hugging Face HUb下载&…

2024电商新手怎么入行?哪个平台适合自己?

我是电商珠珠 2024年了&#xff0c;电商行业的热度也不断高涨。过年期间&#xff0c;京东在春晚投放了华为大礼包&#xff1b;淘宝也紧跟春晚步伐上架明星同款穿搭&#xff1b;抖音和央视春晚达成合作&#xff0c;在平台内直播&#xff0c;还送相应的福袋&#xff0c;和春晚独…

判断连续数据同意特征的方法:插旗法

bool isMonotonic(int* nums, int numsSize) {int flag 2;for (int i 1; i < numsSize; i) {if (nums[i-1] > nums[i]) {if (flag 0)return false;flag 1;}else if (nums[i-1] < nums[i]) {if (flag 1)return false;flag 0;}}return true; }此代码较为简单&…

剑指offer--c++--n个骰子的点数

目录 题目&#xff1a; 题目分析&#xff1a; 最后编写代码&#xff1a; 输出结果 题目&#xff1a; 把n个骰子扔在地上&#xff0c;所有骰子朝上一面的点数之和为s。输入n&#xff0c;打印出s的所有可能的值出现的概率。 感谢大佬的帮助&#xff1a;https://www.cnblogs.c…

Deeplearning4j【基础 01】初识Java深度学习框架DL4J

初识Java深度学习框架DL4J 1.起因2.简介3.组件3.1 Deeplearning4j/ScalNet3.1.1 Deeplearning4jf&#xff08;Java&#xff09;3.1.2 ScalNet&#xff08;Scala&#xff09; 3.2 ND4J/LibND4J3.3 SameDiff3.4 DataVec3.5 Arbiter3.6 RL4J 4.总结 内容来自网络&#xff0c;基于官…

7.1 支付模块 - 用户选课

支付模块 - 需求分析、添加选课 文章目录 支付模块 - 需求分析、添加选课一、需求分析1.1 选课业务流程1.2 支付业务流程1.3 在线学习业务流程1.4 课程续期业务流程 二、添加选课2.1 执行流程2.2 数据模型2.2.1 选课记录表 choose_course2.2.2 用户课程表 course_tables 2.3 查…

R语言lavaan结构方程模型在复杂网络分析中的科研技术新趋势

此外&#xff0c;我们还将深入探讨R语言的基础知识、结构方程模型的基本原理、lavaan程序包的使用方法等内容。无论是潜变量分析、复合变量分析&#xff0c;还是非线性/非正态/缺失数据处理、分类变量分析、分组数据处理等复杂问题&#xff0c;我们都将一一为您解析。 希望通过…

线程安全之死锁

目录 一、概念 二、例子 三、死锁相关面试题目 一、概念 死锁主要发生在有多个依赖锁存在时,会在一个线程试图以另一个线程相反顺序锁住互斥量时发生 死锁使得一个或多个线程被挂起而无法继续执行,最糟糕的是,这种情况还不容易被发现。 在一个线程中对一个已经加锁的普通锁…

springboot-整合mybatis

1.导入依赖 <!--整合mybatis--><dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>3.0.3</version></dependency><!--mysql--><dependen…

为什么不从独立服务器中转向云或其他方案呢?

传统的专用服务器&#xff0c;如香港服务器租赁、重庆服务器租赁等&#xff0c;是最强大、最稳定的业务托管类型之一。您将获得比任何其他托管计划更多的管理权限和卓越的性能&#xff0c;并且您可以控制整个服务器上的几乎所有内容。 当然&#xff0c;专用服务器也是在线业务…

多线程:线程池

线程池 认识线程池 什么是线程池 线程池就是一个可以复用线程的技术。 不使用线程池的问题 用户每发起一个请求&#xff0c;后台就需要创建一个新线程来处理&#xff0c;下次新任务来了肯定又要创建新线程处理的&#xff0c;而创建新线程的开销是很大的&#xff0c;并且请…