npm install prismjs -S
npm install babel-plugin-prismjs -D
babel.config.js
module.exports = {
presets: ['@vue/app'],
plugins: [
[
'prismjs',
{
languages: ['javascript', 'css', 'markup'],
plugins: ['line-numbers'], //配置显示行号插件
theme: 'solarizedlight', //主体名称
css: true
}
]
]
};
.babelrc 注意使用双引号,否则报错
//.babelrc文件配置后的plugins选项内容
"plugins": ["transform-vue-jsx", "transform-runtime", [
"component",
{
"libraryName": "element-ui",
"styleLibraryName": "theme-chalk"
}
],
["prismjs", {
"languages": ["javascript", "css", "markup"],
"plugins": ["line-numbers"],
"theme": "twilight",
"css": true
}]
]
<template>
<pre :class="'hx-scroll ' + lineNumbers">
<code :class="'language-'+ type" v-html="showCode"></code>
</pre>
</template>
<script>
import Prism from 'prismjs';
export default {
name: 'prism',
components: {},
props: {
code: {
type: String,
default: ''
},
type: {
type: String,
default: 'js'
},
isShowlineNumbers: {
type: Boolean,
default: true
}
},
data() {
return {};
},
computed: {
lineNumbers() {
return this.isShowlineNumbers ? 'line-numbers' : '';
},
showCode() {
return Prism.highlight(this.code, Prism.languages[this.type], this.type);
}
},
mounted() {
Prism.highlightAll();
},
methods: {}
};
</script>
<style scoped></style>
<template>
<div>
<prview-code :code="code"></prview-code>
<el-button type="primary" @click="handleFormula">公式弹窗</el-button>
<el-button type="primary" @click="handleGroup">分组弹窗</el-button>
<formula :dialogVisible.sync="visible" v-if="visible" />
<group :dialogVisible.sync="groupVisible" v-if="groupVisible" />
</div>
</template>
<script>
import prviewCode from '../tools/prismjs/Index.vue';
import formula from '../dialog/formula.vue';
import group from '../dialog/group.vue';
export default {
name: 'HighlightCode',
components: { prviewCode, formula, group },
data() {
return {
code: `let msg = "hello world"
console.log(msg)`,
visible: false,
groupVisible: false
};
},
computed: {},
mounted() {},
methods: {
handleFormula() {
this.visible = true;
},
handleGroup() {
this.groupVisible = true;
}
}
};
</script>
<style scoped></style>