心态好好
摆脱懒惰和拖延(๑>◡<๑)

Vue3如何利用Prism使代码高亮

在 Vue 3(组合式API)项目中使用 Prism可以采取在线CDN引入的方式,我这里选择用npm安装,在项目根目录执行安装命令npm install prismjs即可。

接着在src/component/目录下创建一个组件,示例如下:

<script setup>
import { onMounted, ref, watch } from 'vue';
// 导入 Prism 核心模块
import Prism from 'prismjs';
//  导入 Prism 主题 CSS(更换颜色只需替换主题名)
import 'prismjs/themes/prism-tomorrow.min.css';
//  导入需要高亮的语言组件
import 'prismjs/components/prism-markup.min.js'; // HTML(markup 包含 HTML/XML)
import 'prismjs/components/prism-css.min.js';     // CSS
import 'prismjs/components/prism-javascript.min.js'; // JS
import 'prismjs/components/prism-typescript.min.js'; // TS(依赖 JS 组件,需后置导入)

// 需要高亮的代码内容
const htmlCode = ref(`
<!DOCTYPE html>
<html lang="zh-CN">
<head>
  <meta charset="UTF-8">
  <title>Vue + Prism 示例</title>
</head>
<body>
  <div id="app" class="container"></div>
</body>
</html>
`);

const cssCode = ref(`
.container {
  width: 100%;
  max-width: 1200px;
  margin: 0 auto;
  padding: 20px;
  background-color: #f5f5f5;
}

#app {
  color: #333;
  font-size: 16px;
}
`);

const jsCode = ref(`
function greet(name) {
  return \`Hello, \${name}!\`;
}

const app = document.getElementById('app');
if (app) {
  app.innerText = greet('Prism');
}
`);

const tsCode = ref(`
// TypeScript 类型定义 + 函数
interface User {
  name: string;
  age: number;
}

function getUserInfo(user: User): string {
  return \`\${user.name} 的年龄是 \${user.age} 岁\`;
}

const user: User = { name: '张三', age: 25 };
console.log(getUserInfo(user)); // 输出:张三 的年龄是 25 岁
`);

// 初始化代码高亮(组件挂载后执行)
const initPrismHighlight = () => {
  Prism.highlightAll(); // 高亮页面中所有带 language-xxx 类的代码块
};

// Vue3 挂载钩子
onMounted(() => {
  initPrismHighlight();
});

// 可选:如果代码内容是动态的,监听数据变化重新高亮
watch([htmlCode, cssCode, jsCode, tsCode], () => {
  // 延迟执行,确保 DOM 更新完成
  setTimeout(() => initPrismHighlight(), 0);
});
</script>

<template>
  <div class="code-highlight-container">
    <!--  HTML 代码高亮 -->
    <div class="code-block">
      <h4>HTML 示例</h4>
      <pre v-pre> <!-- v-pre 避免 Vue 解析 HTML 标签 -->
        <code class="language-html">{{ htmlCode }}</code>
      </pre>
    </div>

    <!--  CSS 代码高亮 -->
    <div class="code-block">
      <h4>CSS 示例</h4>
      <pre v-pre>
        <code class="language-css">{{ cssCode }}</code>
      </pre>
    </div>

    <!--  JavaScript 代码高亮 -->
    <div class="code-block">
      <h4>JavaScript 示例</h4>
      <pre v-pre>
        <code class="language-javascript">{{ jsCode }}</code>
      </pre>
    </div>

    <!-- TypeScript 代码高亮 -->
    <div class="code-block">
      <h4>TypeScript 示例</h4>
      <pre v-pre>
        <code class="language-typescript">{{ tsCode }}</code>
      </pre>
    </div>
  </div>
</template>

<style scoped>
/* 可选:自定义代码块样式(比如内边距、圆角) */
.code-block {
  margin: 20px 0;
}

pre {
  padding: 16px;
  border-radius: 8px;
  overflow-x: auto; /* 处理长代码横向滚动 */
}
</style>

需要注意几个点:TS 组件(prism-typescript.min.js)依赖 JS 组件,必须在导入 prism-javascript.min.js 之后导入;

<code> 的 class 要写 language-typescript(简写 language-ts 也可以);

必须给 <pre>v-pre 指令,避免 Vue 解析 HTML 标签(比如 <div> 会被当成真实dom元素);

 

此外,如果想更改Prism高亮颜色,只需替换导入的 CSS 文件路径,比如换成浅色主题:

// 替换为默认浅色主题
import 'prismjs/themes/prism.min.css';
// 替换为 Solarized Light 暖色调
import 'prismjs/themes/prism-solarizedlight.min.css';

 

赞(0) 打赏
未经允许不得转载:东东的小屋 » Vue3如何利用Prism使代码高亮

评论 抢沙发

觉得文章有用就打赏一下文章作者

非常感谢你的打赏,我们将继续提供更多优质内容,让我们一起创建更加美好的网络世界!

支付宝扫一扫

微信扫一扫

登录

找回密码

注册