使用unpkg CDN引入highlight.js提示找不到cpp语言模块如何解决
问题成因
控制台抛出找不到cpp语言模块的警告,核心原因是highlight.js运行时没有加载到C++语言对应的解析规则,常见诱因有三个:
- 资源版本不统一:引入的样式文件版本为11.5.0,核心JS文件版本为11.5.1,跨小版本的资源混用可能导致模块映射关系异常,无法正确识别内置语言
- 资源加载失败:JS资源使用了协议相对路径
//unpkg.com/...,如果本地直接打开HTML文件(走file://协议访问),会默认从本地磁盘路径查找JS文件,直接导致核心库加载失败 - 缺少对应语言模块:highlight.js v11版本之后,默认引入的
highlight.min.js为核心精简构建包,仅内置了极少部分高频语言,C/C++未被包含在默认包内,需要额外引入对应语言模块,或直接使用全量构建包
解决方案
按照以下步骤调整即可修复问题:
- 统一资源版本、补全协议头
所有highlight.js相关资源使用完全一致的版本号,同时给CDN地址补全https:协议头,避免本地调试时出现资源加载失败问题。 - 按需选择资源引入方式,二选一即可:
- 方案1(简单省事,适合个人站点):直接引入包含所有官方支持语言的全量构建包,无需单独加载各个语言模块,示例代码:
<link rel="stylesheet" href="https://unpkg.com/@highlightjs/cdn-assets@11.9.0/styles/rainbow.min.css"> <script src="https://unpkg.com/@highlightjs/cdn-assets@11.9.0/highlight.min.js"></script>- 方案2(体积更小,适合对加载速度要求高的场景):保留核心精简包,单独引入自己需要用到的语言模块,以C++为例,示例代码:
<link rel="stylesheet" href="https://unpkg.com/@highlightjs/cdn-assets@11.9.0/styles/rainbow.min.css"> <script src="https://unpkg.com/@highlightjs/cdn-assets@11.9.0/highlight.min.js"></script> <!-- 单独引入C++语言模块,用到其他语言时按相同格式追加即可 --> <script src="https://unpkg.com/@highlightjs/cdn-assets@11.9.0/languages/cpp.min.js"></script> - 确认初始化顺序
将初始化代码<script>hljs.highlightAll();</script>放在所有highlight.js相关资源标签的最末尾,保证执行时核心库和语言模块已经全部加载完成。 - 检查代码块标记
需要高亮的C++代码块,要给内部的<code>标签添加language-cpp类名,标准格式参考:<pre> <code class="language-cpp"> // 此处写C++业务代码 </code> </pre>
内容的提问来源于stack exchange,提问作者WindowsRegedit
相关产品推荐
相关产品推荐

