Vue中实现Prism代码高亮需引入样式与JS、使用结构、在onMounted/onUpdated中调用Prism.highlightAll(),并按需引入插件。

在 Vue 模板中实现代码高亮,核心是让 Prism.js 正确识别并处理 <pre class="brush:php;toolbar:false;"><code></code> 结构中的原始代码字符串。关键不在“写模板”,而在“触发高亮”和“确保样式/语言支持到位”。下面按真实开发流程分步说明。</p>
<H3>引入 Prism 样式与基础 JS</H3>
<p>必须显式加载主题 CSS 和 Prism 主库,否则只有 HTML 结构、没有颜色和语法解析:</p>
<ul>
<li>在组件的 <code><style></code> 块中用 <code>@import</code> 引入主题(如 <code>prism-tomorrow.css</code>),或全局注入到 <code>main.js</code></li>
<li>在组件脚本中 <code>import Prism from 'prismjs'</code> —— 注意不是默认导出,需确认包导出方式(Vue 3 推荐用具名导入)</li>
<li>若只用常见语言(js/ts/html/css),可跳过手动注册;如需 Python、Rust 等,要额外 <code>import 'prismjs/components/prism-python'</code></li>
</ul>
<H3>模板结构与 class 命名规范</H3>
<p><code><pre class="brush:php;toolbar:false;"></code> 包裹 <code><code></code> 是必须的语义结构,且 class 必须带 <code>language-xxx</code> 前缀:</p><div class="aritcle_card flexRow">
<div class="artcardd flexRow">
<a class="aritcle_card_img" href="/xiazai/skill10385" title="Vue Wrap"><img
src="https://img.php.cn/upload/skill/001/246/273/6adaf20d3191a227.jpg" alt="Vue Wrap" ></a>
<div class="aritcle_card_info flexColumn">
<a href="/xiazai/skill10385" title="Vue Wrap">Vue Wrap</a>
<p>Vue 入门指南 — JavaScript 框架</p>
</div>
<a href="/xiazai/skill10385" title="Vue Wrap" class="aritcle_card_btn flexRow flexcenter"><b></b><span>下载</span> </a>
</div>
</div>
<ul>
<li>正确写法:<code><pre class="brush:php;toolbar:false;"><code class="javascript">{{ rawCode }}</code></pre>
<div class="js">...</div>(Prism 不识别)、<code class="js">(缺 language- 前缀)
language-typescript 而非 language-ts,否则高亮失效手动触发高亮与响应式更新
Vue 的响应式机制不会自动重跑 Prism,必须在 DOM 渲染后主动调用:
立即学习“前端免费学习笔记(深入)”;
- 首次渲染:在
onMounted(Vue 3)或mounted(Vue 2)中执行Prism.highlightAll() - 内容动态变更(如切换代码片段):在
onUpdated或watch回调里再次调用Prism.highlightAll() - 若使用
v-html插入代码,务必加this.$nextTick(() => Prism.highlightAll())(Vue 2)或nextTick(() => Prism.highlightAll())(Vue 3)
增强体验:行号、复制按钮等插件
Prism 插件需单独引入 JS + CSS,并在 HTML 中添加对应 class:
- 显示行号:引入
prism-line-numbers.min.js和prism-line-numbers.min.css,<code>上加line-numbers类 - 右上角复制按钮:引入
prism-copy-to-clipboard.min.js,无需额外 class,自动生效 - 显示语言标签:引入
prism-show-language.min.js,class 加show-language - Vite 用户推荐用
vite-plugin-prismjs,可自动按需打包语言和插件,减少体积

















