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

highlight.js不支持語言幾種常用的解決方法

 更新時間:2026年01月13日 08:37:46   作者:我有一棵樹  
highlight.js是用來凸顯高亮代碼的一種工具包,下面這篇文章主要介紹了highlight.js不支持語言幾種常用的解決方法,文中通過代碼介紹的非常詳細,需要的朋友可以參考下

一、前端高亮不支持語言的問題及解決方案

在前端技術(shù)文章或代碼展示中,我們通常使用 highlight.js 來實現(xiàn)代碼高亮。highlight.js 支持大部分常見語言,如 JavaScript、TypeScript、HTML、CSS 等,但對于一些冷門或自定義語言(如 conf 配置文件、特定 DSL),默認情況下并不支持。這就可能出現(xiàn)以下問題:

  1. 代碼無法高亮顯示,顯示為純文本。

  2. 為了避免報錯,開發(fā)者通常會臨時替代語言,導致高亮不準確。

  3. 可維護性差,新增語言時需要修改邏輯或?qū)戭~外判斷。

下面整理幾種常用解決方案。

二、方法一:語言替代(折中方案)

最簡單的做法是 用已有語言代替不支持的語言。例如,將 conf 配置文件當作 bash 高亮:

md.options.highlight = (str: string, lang: string) => {
  if (lang === 'conf') {
    lang = 'bash'
  }
  lang = lang || 'plaintext' // highlight 支持 plaintext
  if (hljs.getLanguage(lang)) {
    return hljs.highlight(str, { language: lang }).value
  }
  return hljs.highlightAuto(str).value
}

優(yōu)點:

  • 簡單快捷,無需額外注冊語言。

缺點:

  • 高亮語法可能不準確。

  • 難以擴展,新增語言需要寫 if 分支。

三、方法二:使用registerLanguage注冊語言別名(推薦)

更規(guī)范的做法是使用 highlight.js 提供的 registerLanguage API,將不支持語言注冊為已有語言規(guī)則或自定義規(guī)則。

1. 注冊已有語言作為別名

import hljs from 'highlight.js/lib/core'
import bash from 'highlight.js/lib/languages/bash'

hljs.registerLanguage('bash', bash)
hljs.registerLanguage('conf', bash) // 將 conf 注冊為 bash 的語法

然后在 markdown-it 高亮函數(shù)里直接使用:

md.options.highlight = (str: string, lang: string) => {
  if (lang && hljs.getLanguage(lang)) {
    return hljs.highlight(str, { language: lang }).value
  }
  return hljs.highlightAuto(str).value
}

優(yōu)點:

  • 代碼邏輯更清晰,無需 if (lang === 'conf')。

  • 可維護性強,新增別名只需注冊一次。

缺點:

  • 高亮語法依舊復(fù)用已有語言,可能不完全匹配目標語言。

2. 注冊自定義語言

如果希望高亮完全匹配,可以自定義語言規(guī)則:

import hljs from 'highlight.js/lib/core'

const confLang = function (hljs: any) {
  return {
    name: 'conf',
    contains: [
      hljs.COMMENT('#', '$'),
      { className: 'keyword', begin: '\\b(server|port|timeout)\\b' },
      { className: 'string', begin: '"', end: '"' },
    ]
  }
}

hljs.registerLanguage('conf', confLang)

然后同樣在 markdown-it 或直接調(diào)用 hljs.highlight 時使用即可。

優(yōu)點:

  • 高亮準確,完全匹配自定義語法。

  • 擴展性強,可隨時增加新語言規(guī)則。

四、方法三:按需加載語言(優(yōu)化體積)

對于 Vite、Webpack 等前端項目,如果引入了 highlight.js 完整版本,體積可能偏大。可以使用 core + registerLanguage 按需加載語言:

import hljs from 'highlight.js/lib/core'
import javascript from 'highlight.js/lib/languages/javascript'
import bash from 'highlight.js/lib/languages/bash'

hljs.registerLanguage('javascript', javascript)
hljs.registerLanguage('bash', bash)
hljs.registerLanguage('conf', bash) // 別名

這樣只打包需要的語言,體積更小。

不使用 core 版本,而是 highlight.js 的完整版,就不用手動注冊語言

highlight.js 有兩個主要安裝方式

  1. 完整版(highlight.js)

    • 默認包含 全部常見語言的解析器

    • 即使你不注冊語言,hljs.highlight(str, { language: 'js' }) 也能直接工作

    • 所以你“沒注冊也能用”,是因為這些語言在 bundle 里已經(jīng)內(nèi)置了

  2. 核心版(highlight.js/core)

    • 不包含任何語言解析器

    • 必須手動 registerLanguage 才能生效

    • 適合按需加載語言、優(yōu)化打包體積

五、總結(jié)

方法適用場景優(yōu)缺點
語言替代(if 分支)快速處理少量不支持語言簡單但高亮不準確,擴展性差
registerLanguage 注冊別名已有語言可以復(fù)用規(guī)則邏輯清晰、易維護,高亮有限
自定義語言注冊需要精準高亮的自定義語法高亮準確,靈活,維護成本略高
按需注冊前端項目優(yōu)化體積減少打包大小,需手動注冊語言

六、推薦實踐

  1. 快速展示代碼 → 使用語言替代或注冊別名。

  2. 技術(shù)文章或需要精準語法高亮 → 自定義語言注冊。

  3. 前端項目優(yōu)化 → 使用 core + 按需注冊語言。

  4. markdown-it 集成 → 高亮函數(shù)統(tǒng)一調(diào)用 hljs.highlight,避免在邏輯中寫太多 if。

通過這些方法,你可以優(yōu)雅地解決 highlight.js 不支持語言的問題,同時保證代碼可維護、可擴展,并可優(yōu)化前端打包體積。

到此這篇關(guān)于highlight.js不支持語言幾種常用的解決方法的文章就介紹到這了,更多相關(guān)highlight.js不支持語言內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評論

城固县| 荔浦县| 九江县| 西昌市| 忻州市| 新营市| 布拖县| 都安| 泰来县| 荔波县| 吴川市| 壤塘县| 三门峡市| 乡宁县| 衡东县| 丰原市| 罗山县| 泰兴市| 香港 | 稷山县| 新乡市| 高平市| 通州区| 台南市| 东港市| 江口县| 明溪县| 天全县| 西吉县| 灵台县| 武强县| 枞阳县| 晋江市| 贵定县| 竹山县| 台中市| 西峡县| 屯留县| 松桃| 巴林右旗| 太仆寺旗|