vue中展示、讀取.md?文件的方法(批量引入、自定義代碼塊高亮樣式)
1.首先安裝以下依賴
- vue-markdown-loader
- vue-loader
- vue-template-compiler
- github-markdown-css
- highlight.js
npm install vue-markdown-loader -D npm install vue-loader -D npm install vue-template-compiler -D npm install github-markdown-css -D npm install highlight.js -D
2.在 vue.config.js 文件中配置 webpack
module.exports = {
chainWebpack: (config) => {
config.module
.rule("md")
.test(/\.md/)
.use("vue-loader")
.loader("vue-loader")
.end()
.use("vue-markdown-loader")
.loader("vue-markdown-loader/lib/markdown-compiler")
.options({
raw: true,
});
},
};3.組件中使用時(shí)
單個(gè)文件使用可在組件內(nèi)單獨(dú)引用
main.js 中引入樣式
// markdown樣式 import "github-markdown-css"; // 代碼高亮 import "highlight.js/styles/github.css"; //默認(rèn)樣式
- vue 組件中使用
- 將 md 文件作為組件導(dǎo)入,注意:class 的值必須包含 markdown-body ,否則樣式無法生效!
<template>
<demo-md class="markdown-body"></demo-md>
</template>
<script>
import DemoMd from './demo.md';
export default {
components: {
DemoMd
}
}
</script>批量導(dǎo)入多個(gè)文件
在 md 文件同目錄中創(chuàng)建 index.js 文件,導(dǎo)入 md 文件
// md文件批量引入
import javaScript_prototype from "./javaScript_prototype.md";
import git_basics from "./git_basics.md";
import click_copy from "./click_copy.md";
// 創(chuàng)建md組件同時(shí)設(shè)置文章其他信息,單獨(dú)導(dǎo)出使用
export const components = {
click_copy: {
id: 3,
name: click_copy,
type: ["html", "javaScript", "vue"],
describe: "JavaScript頁面點(diǎn)擊復(fù)制功能(vue)",
date: "2021-11-23 15:51:00",
},
git_basics: {
id: 2,
name: git_basics,
type: ["git"],
describe: "git 基礎(chǔ)使用(創(chuàng)建、推送、克隆、拉取、常用指令等)",
date: "2021-11-23 14:22:00",
},
javaScript_prototype: {
id: 1,
name: javaScript_prototype,
type: ["javaScript"],
describe: "個(gè)人對(duì) javaScript 原型鏈理解",
date: "2021-11-22 10:00:00",
},
};
// 注冊全部md組件
export const mdArticle = function (Vue, opts = {}) {
Object.keys(components).forEach((key) => {
Vue.component(key, components[key].name);
});
};在 main.js 文件中引入剛剛創(chuàng)建的 index.js 文件,導(dǎo)出全部 me 組件,全局注冊
引入markdown樣式和高亮樣式
// markdown樣式
import "github-markdown-css";
// 代碼高亮
import "highlight.js/styles/github.css"; //默認(rèn)樣式
// 代碼高亮devibeans swh自定義顏色
// import './assets/css/swh.css' //自定義樣式
// 引入md文章組件列表
import { mdArticle } from "./article/index";
Vue.use(mdArticle);自定義代碼代碼塊高亮樣式(文件中自行修改顏色)
創(chuàng)建 css 文件
/* 代碼塊高亮樣式 */
pre code.hljs {
display: block;
overflow-x: auto;
padding: 1em;
}
code.hljs {
padding: 3px 5px;
}
.hljs {
color: #eaeaea;
background: #000;
}
.hljs-subst {
color: #eaeaea;
}
.hljs-emphasis {
font-style: italic;
}
.hljs-strong {
font-weight: 700;
}
.hljs-type {
color: #eaeaea;
}
/* 參數(shù) */
.hljs-params {
color: #ea00ff;
}
/* true顏色 */
.hljs-literal,
.hljs-name,
.hljs-number {
color: rgb(105, 195, 255);
font-weight: bolder;
}
/* 注釋顏色 */
.hljs-comment {
color: #8a8a8a;
}
.hljs-quote,
.hljs-selector-id {
color: #0ff;
}
/* 函數(shù)顏色 */
.hljs-template-variable,
.hljs-title,
.hljs-variable {
color: #c3bf7b;
font-weight: 700;
}
/* 對(duì)象顏色 */
.hljs-keyword,
.hljs-selector-class,
.hljs-symbol {
color: #9d6bb4;
}
/* 值的顏色 */
.hljs-bullet,
.hljs-string {
color: rgb(255, 142, 66);
}
.hljs-section,
.hljs-tag {
color: rgb(105, 195, 255);
}
.hljs-selector-tag {
color: #000fff;
font-weight: 700;
}
.hljs-attribute,
.hljs-built_in,
.hljs-link,
.hljs-regexp {
color: rgb(105, 195, 255);
}
.hljs-meta {
color: #fff;
font-weight: bolder;
}App.vue 可直接覆蓋(代碼塊背景色、代碼括號(hào)顏色)
<style lang="less">
#app {
font-family: "楷體";
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
color: #2c3e50;
.markdown-body .highlight pre,
.markdown-body pre {
background-color: rgb(34, 34, 34); // 代碼塊背景色改變默認(rèn)
color: rgb(105, 195, 255); //代碼括號(hào)顏色
}
}
</style>組件中直接使,可以根據(jù) parameter 動(dòng)態(tài)顯示 md 文件
- 將 md 文件作為組件導(dǎo)入,注意:class 的值必須包含 markdown-body ,否則樣式無法生效!
- parameter 是文章 md 組件名稱,通過列表點(diǎn)擊傳遞 name,實(shí)現(xiàn)動(dòng)態(tài)顯示 md 組件
<template>
<div class="markdown-body">
<!-- 文章詳情頁面 -->
<div class="details">
<!-- md文件組件 -->
<component :is="parameter"></component>
</div>
</div>
</template>
export default {
data() {
return {
parameter: "", //文章對(duì)應(yīng)組件名字
};
},
mounted() {
this.getParameters();
},
methods: {
getParameters() {
// 獲取文章參數(shù) 點(diǎn)擊跳轉(zhuǎn)獲取參數(shù) 或者 刷新頁面從url中獲取參數(shù)
this.parameter =
this.$route.query.article || location.search.split("=")[1];
},
},
};效果展示
點(diǎn)擊 md 文件列表

進(jìn)入md 文件詳情頁面

到此這篇關(guān)于vue中展示、讀取.md 文件的方法(批量引入、自定義代碼塊高亮樣式)的文章就介紹到這了,更多相關(guān)vue展示、讀取.md 文件內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
vue項(xiàng)目實(shí)現(xiàn)記住密碼到cookie功能示例(附源碼)
本篇文章主要介紹了vue項(xiàng)目實(shí)現(xiàn)記住密碼到cookie功能示例(附源碼),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-01-01
vue 對(duì)象添加或刪除成員時(shí)無法實(shí)時(shí)更新的解決方法
這篇文章主要介紹了vue 對(duì)象添加或刪除成員時(shí)無法實(shí)時(shí)更新的解決方法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2019-05-05
Vue3 Element Plus表格默認(rèn)顯示一行實(shí)例
這篇文章主要介紹了Vue3 Element Plus表格默認(rèn)顯示一行實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2025-07-07
在axios中使用params傳參的時(shí)候傳入數(shù)組的方法
今天小編就為大家分享一篇在axios中使用params傳參的時(shí)候傳入數(shù)組的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2018-09-09
vue3使用Pinia的store的組件化開發(fā)模式詳解
這篇文章主要介紹了vue3使用Pinia的store的組件化開發(fā)模式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2025-04-04

