最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Vue3前端適配Markdown格式問題及最佳解決方案

 更新時間:2025年06月02日 10:36:11   作者:隔壁兔爺  
Markdown?編輯器作為一種輕量級文本格式,已被廣泛應(yīng)用于博客、文檔編輯、評論系統(tǒng)等場景,下面這篇文章主要介紹了Vue3前端適配Markdown格式問題及最佳解決方案,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下

一、初始問題

  • 使用 vue3-markdown-it 組件時出現(xiàn)錯誤

    Module not found: Error: Can't resolve 'babel-runtime/core-js/get-iterator'
    • 原因:vue3-markdown-it 是為 Vue 2 設(shè)計的,依賴了舊版 babel-runtime 和 core-js

  • 安裝 vue3-markdown-it 后仍報錯

    Module not found: Error: Can't resolve 'vue-vue3-markdown-it'
    • 原因:vue3-markdown-it 的導(dǎo)入名稱與實際不符

二、解決方案對比

方案優(yōu)點缺點
1. 改用 vue3-markdown-it直接支持 Vue 3,功能較完整需處理舊版依賴問題
2. 使用 markdown-it + v-html純 JavaScript 實現(xiàn),無額外依賴需手動處理 HTML 轉(zhuǎn)義
3. 使用其他 Markdown 組件可能有更豐富的功能需重新學(xué)習(xí)新組件 API

三、最終推薦方案:markdown-it + v-html

1. 安裝依賴

npm install markdown-it dompurify --save

2. 組件實現(xiàn)示例

模板部分

html

<template>
  <div class="markdown-content" v-html="parsedMarkdown"></div>
</template>

腳本部分

javascript

<script>
import { marked } from 'marked';
import DOMPurify from 'dompurify';
?
export default {
  props: {
    content: {
      type: String,
      default: ''
    },
    options: {
      type: Object,
      default: () => ({
        breaks: true,
        linkify: true,
        typographer: true
      })
    }
  },
  computed: {
    parsedMarkdown() {
      // 使用 marked 解析 Markdown
      const html = marked(this.content, this.options);
      // 使用 DOMPurify 凈化 HTML
      return DOMPurify.sanitize(html);
    }
  }
}
</script>

樣式部分

css

<style scoped>
.markdown-content {
  line-height: 1.6;
}
.markdown-content img {
  max-width: 100%;
}
.markdown-content pre {
  background: #f5f5f5;
  padding: 10px;
  border-radius: 4px;
  overflow-x: auto;
}
.markdown-content code {
  background: #f0f0f0;
  padding: 2px 4px;
  border-radius: 2px;
}
.markdown-content blockquote {
  border-left: 4px solid #ddd;
  padding-left: 10px;
  color: #666;
}
</style>

3. 高級功能擴(kuò)展

添加 Markdown 解析器配置

javascript

import { marked } from 'marked';
import { highlight } from 'highlight.js';
import 'highlight.js/styles/github.css';
?
// 配置 marked
const md = new marked.Marked({
  highlight: function(code, lang) {
    const language = hljs.getLanguage(lang) ? lang : 'plaintext';
    return highlight(code, { language }).value;
  },
  breaks: true,
  smartLists: true,
  smartypants: true
});
?
// 在組件中使用
computed: {
  parsedMarkdown() {
    return DOMPurify.sanitize(md.parse(this.content));
  }
}

定義渲染器

const renderer = new marked.Renderer();
?
// 自定義鏈接渲染
renderer.link = function(href, title, text) {
  return `<a href="${href}" rel="external nofollow"  target="_blank" rel="noopener noreferrer"${title ? ` title="${title}"` : ''}>${text}</a>`;
};
?
const md = new marked.Marked({ renderer });

四、常見問題及解決

1. 表格不顯示

| 表頭1 | 表頭2 |
|-------|-------|
| 內(nèi)容1 | 內(nèi)容2 |

解決:確保表格格式正確,列數(shù)一致

2. 圖片不顯示

![alt text](image.jpg)

解決:檢查圖片路徑是否正確,或使用絕對路徑

3. 代碼高亮無效

1. 安裝 highlight.js
2. 配置 marked 使用 highlight.js
3. 添加樣式

五、最佳實踐建議

  • 始終使用 DOMPurify 凈化 HTML,特別是當(dāng)內(nèi)容來源不可信時

  • 配置合理的 XSS 防護(hù)

    const clean = DOMPurify.sanitize(dirty, {
      ALLOWED_TAGS: ['h1', 'h2', 'p', 'a', 'img', 'code', 'pre', 'em', 'strong'],
      ALLOWED_ATTR: ['href', 'src', 'alt', 'title', 'target']
    });
  • 處理大段 Markdown 內(nèi)容

    • 使用虛擬滾動

    • 分塊渲染

    • 延遲加載圖片

  • 自定義樣式

    /* 覆蓋默認(rèn)樣式 */
    .markdown-content h1 {
      color: #333;
      border-bottom: 1px solid #eee;
      padding-bottom: 0.5em;
    }

六、性能優(yōu)化

  • 使用 Web Worker 解析

    // main.js
    const worker = new Worker('markdown-worker.js');
    worker.postMessage({ content: markdownText });
    worker.onmessage = (e) => {
      this.parsedMarkdown = e.data.html;
    };
  • 緩存解析結(jié)果

    const cache = new Map();
    ?
    function getMarkdownHtml(markdown) {
      if (cache.has(markdown)) {
        return cache.get(markdown);
      }
      const html = md.parse(markdown);
      cache.set(markdown, html);
      return html;
    }
  • 懶加載高亮庫

    // 按需加載 highlight.js
    import('highlight.js').then(hljs => {
      // 使用 hljs
    });

七、總結(jié)

需求解決方案
基礎(chǔ) Markdown 渲染使用 marked + v-html
安全防護(hù)使用 DOMPurify 凈化 HTML
代碼高亮集成 highlight.js
表格支持確保 Markdown 表格格式正確
圖片顯示檢查路徑或使用絕對路徑
大段內(nèi)容優(yōu)化虛擬滾動/分塊渲染
自定義樣式覆蓋默認(rèn)樣式類

通過以上方案,可以解決 Vue3 前端中 Markdown 渲染的各種常見問題,并提供良好的用戶體驗和安全性。

到此這篇關(guān)于Vue3前端適配Markdown格式問題及最佳解決方案的文章就介紹到這了,更多相關(guān)Vue3前端適配Markdown格式內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • vue單向數(shù)據(jù)流的深入理解

    vue單向數(shù)據(jù)流的深入理解

    隨著前端的項目的越來越復(fù)雜,出現(xiàn)了一堆概念來降低開發(fā)的復(fù)雜性,單向數(shù)據(jù)流就是其中一個,下面這篇文章主要給大家介紹了關(guān)于vue單向數(shù)據(jù)流的相關(guān)資料,文中通過實例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-01-01
  • Vue.js實現(xiàn)備忘錄功能

    Vue.js實現(xiàn)備忘錄功能

    這篇文章主要為大家詳細(xì)介紹了Vue.js實現(xiàn)備忘錄功能,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-06-06
  • Vue.js集成Word實現(xiàn)在線編輯功能

    Vue.js集成Word實現(xiàn)在線編輯功能

    在現(xiàn)代Web應(yīng)用中,集成文檔編輯功能變得越來越常見,特別是在協(xié)作環(huán)境中,能夠直接在Web應(yīng)用內(nèi)編輯Word文檔可以極大地提高工作效率,本文將詳細(xì)介紹如何在Vue.js項目中集成Word在線編輯功能,需要的朋友可以參考下
    2024-08-08
  • vue19 組建 Vue.extend component、組件模版、動態(tài)組件 的實例代碼

    vue19 組建 Vue.extend component、組件模版、動態(tài)組件 的實例代碼

    這篇文章主要介紹了vue19 組建 Vue.extend component、組件模版、動態(tài)組件 的實例代碼,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-04-04
  • 使用el-form之表單校驗自動定位到報錯位置問題

    使用el-form之表單校驗自動定位到報錯位置問題

    這篇文章主要介紹了使用el-form之表單校驗自動定位到報錯位置問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-05-05
  • Vue項目返回頁面保持上次滾動狀態(tài)方式

    Vue項目返回頁面保持上次滾動狀態(tài)方式

    這篇文章主要介紹了Vue項目返回頁面保持上次滾動狀態(tài)方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2025-04-04
  • DataV?全屏容器組件源碼解析

    DataV?全屏容器組件源碼解析

    這篇文章主要為大家介紹了DataV?全屏容器組件源碼解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-04-04
  • 基于Vue-cli的一套代碼支持多個項目

    基于Vue-cli的一套代碼支持多個項目

    這篇文章主要介紹了基于Vue-cli的一套代碼支持多個項目的方案,幫助大家更好的理解和學(xué)習(xí)使用vue框架,感興趣的朋友可以了解下
    2021-03-03
  • Vue數(shù)組的劫持逐步分析講解

    Vue數(shù)組的劫持逐步分析講解

    小編這次要給大家分享的是如何實現(xiàn)vue2.x數(shù)組劫持,文章內(nèi)容豐富,感興趣的小伙伴可以來了解一下,希望大家閱讀完這篇文章之后能夠有所收獲
    2023-01-01
  • vue.js封裝switch開關(guān)組件的操作

    vue.js封裝switch開關(guān)組件的操作

    這篇文章主要介紹了vue.js封裝switch開關(guān)組件的操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-10-10

最新評論

泌阳县| 北流市| 山东| 西林县| 鞍山市| 醴陵市| 四平市| 开封县| 黎平县| 城市| 鄂托克前旗| 靖边县| 河西区| 大宁县| 东光县| 密山市| 鸡西市| 海伦市| 保德县| 库车县| 岚皋县| 遂溪县| 竹山县| 分宜县| 伊春市| 冀州市| 淳化县| 平江县| 腾冲县| 泗水县| 阿拉善左旗| 平潭县| 香港 | 织金县| 临沭县| 阿城市| 乐东| 周口市| 五原县| 怀化市| 富阳市|