vue3脚手架如何使用marked库将markdown文件渲染带页面,并使得代码块在高亮的同时具有行号
时间: 2023-09-07 11:05:07 浏览: 301
### 回答1:
使用Vue3脚手架,可以使用marked库将Markdown文件渲染成HTML页面,并通过highlight.js库实现代码块的高亮和行号显示。下面是具体的步骤:
1. 安装所需的库
使用npm或yarn安装marked和highlight.js库:
```shell
npm install marked highlight.js --save
```
2. 创建一个Markdown文件
在src目录下创建一个Markdown文件,例如example.md,用于测试渲染Markdown的功能。
```markdown
# Hello, world!
这是一个示例Markdown文件。
## 代码块
```js
function hello() {
console.log("Hello, world!");
}
```
以上是一个JavaScript代码块。
## 列表
- 列表项1
- 列表项2
- 列表项3
```
3. 创建一个Markdown组件
在src/components目录下创建一个Markdown组件,例如Markdown.vue,用于渲染Markdown文件。
```vue
<template>
<div v-html="markdown"></div>
</template>
<script>
import marked from "marked";
import hljs from "highlight.js";
export default {
name: "Markdown",
props: {
source: String,
},
computed: {
markdown() {
return marked(this.source, {
highlight: function (code, lang) {
if (lang && hljs.getLanguage(lang)) {
return hljs.highlight(lang, code).value;
}
return hljs.highlightAuto(code).value;
},
langPrefix: "hljs language-",
breaks: true,
gfm: true,
});
},
},
};
</script>
<style>
.hljs-line-numbers {
text-align: right;
border-right: 1px solid #ccc;
color: #999;
padding-right: 5px;
}
</style>
```
在组件中,我们使用marked库将Markdown文件渲染成HTML页面,通过props属性接受Markdown文件的路径或字符串。同时,我们传递一个highlight函数给marked库,使用highlight.js对代码块进行高亮。另外,我们使用hljs-line-numbers类为代码块添加行号显示。
4. 在页面中使用Markdown组件
在需要显示Markdown文件的页面中,引入Markdown组件,传递Markdown文件的路径或字符串作为source属性的值。
```vue
<template>
<div>
<Markdown :source="markdown" />
</div>
</template>
<script>
import Markdown from "@/components/Markdown.vue";
import exampleMarkdown from "@/example.md";
export default {
name: "App",
components: {
Markdown,
},
data() {
return {
markdown: exampleMarkdown,
};
},
};
</script>
```
在页面中引入Markdown组件,并将example.md文件作为markdown属性的值传递给Markdown组件。
这样,当页面加载时,Markdown组件将会把example.md文件渲染成HTML页面,并且代码块会被高亮并且显示行号。
### 回答2:
使用marked库将markdown文件渲染到页面,并使代码块具有行号,可以按照以下步骤操作:
1. 在Vue项目中安装marked库,可以使用npm或者yarn进行安装,命令如下:
```
npm install marked
```
或者
```
yarn add marked
```
2. 在Vue组件中引入marked库:
```javascript
import marked from 'marked';
```
3. 创建一个方法,用来处理将markdown文件转换成HTML字符串,并添加行号功能:
```javascript
methods: {
convertMarkdownToHTML() {
const markdown = `...`; // 读取或引入需要渲染的markdown文件
const renderer = new marked.Renderer();
let codeBlockCounter = 0;
const originalCodeRenderer = renderer.code;
renderer.code = function (code, infostring, escaped) {
const lineNumbers = code.split('\n').map((line, index) => {
return `<span class="line-number">${index + 1}</span>`;
}).join('');
const highlightedCode = originalCodeRenderer.call(this, code, infostring, escaped);
const codeBlockWithLineNumbers = `<div class="code-block">
<pre><code>${lineNumbers}${highlightedCode}</code></pre>
</div>`;
codeBlockCounter++;
return codeBlockWithLineNumbers;
};
const html = marked(markdown, { renderer: renderer });
return html;
}
}
```
4. 将转换后的HTML字符串渲染到页面中:
```html
<template>
<div>
<div v-html="convertedHTML"></div>
</div>
</template>
```
5. 在Vue组件的`mounted`生命周期钩子中调用方法,将markdown转换成HTML并渲染到页面中:
```javascript
mounted() {
this.convertedHTML = this.convertMarkdownToHTML();
}
```
6. 添加CSS样式来进行代码块的高亮和行号的显示:
```css
.code-block {
position: relative;
}
.line-number {
position: absolute;
top: 0;
left: 0;
width: 30px;
height: 100%;
padding: 12px 5px;
color: #999;
background-color: #f7f7f7;
border-right: 1px solid #ddd;
text-align: center;
font-size: 12px;
line-height: 1.5;
}
```
通过以上步骤,就可以使用marked库将markdown文件渲染到页面,并使得代码块在高亮的同时具有行号。
### 回答3:
使用Vue3脚手架将markdown文件渲染到页面上,并使代码块具有高亮和行号,可以按照以下步骤进行操作:
首先,需要安装marked库,可以使用npm或者yarn进行安装:
```
npm install marked
```
或
```
yarn add marked
```
接下来,在Vue组件中引入marked库:
```javascript
import marked from 'marked';
```
然后,在Vue组件中定义一个字符串变量,用于存储markdown文件的内容:
```javascript
data() {
return {
markdownContent: "# Hello, Vue3\n\nThis is a **markdown** file.",
};
},
```
接着,在组件的template中使用v-html指令渲染markdown内容:
```html
<template>
<div v-html="marked(markdownContent)"></div>
</template>
```
在组件的script中编写一个方法,将代码块高亮并添加行号:
```javascript
methods: {
marked(content) {
const renderer = new marked.Renderer();
renderer.code = (code, language) => {
const hljs = require('highlight.js');
const highlightedCode = language ? hljs.highlight(language, code).value : hljs.highlightAuto(code).value;
const lineNumberCode = highlightedCode.split('\n').map((line, index) => {
return `<span class="line">${index + 1}</span>${line}`;
}).join('\n');
return `<pre><code class="hljs">${lineNumberCode}</code></pre>`;
};
return marked(content, { renderer });
},
}
```
最后,可以在样式文件中为代码块添加样式和行号样式:
```css
pre {
padding: 10px;
background-color: #f0f0f0;
}
pre code {
font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace;
}
.line {
display: inline-block;
width: 40px;
margin-right: 10px;
text-align: right;
color: #777;
}
```
以上就是使用Vue3脚手架将markdown文件渲染到页面上,并使代码块具有高亮和行号的步骤和代码示例。
阅读全文