code标签在SSG中“消失”或“乱码”的根本原因,是生成器将模板占位符当作普通文本原样输出,而非正确解析:如Eleventy中{{title}}未置于.njk文件、Hugo中{{.Title}}写在.md正文里,或HTML压缩器误删code标签结构。

code 标签本身不参与静态网站生成(SSG)的构建逻辑,它只是最终 HTML 输出中的一个语义化标签——生成器是否正确渲染它,取决于模板语法是否被处理、HTML 是否被压缩或转义、以及是否在错误上下文中滥用。
为什么 code 在 SSG 中常“消失”或“乱码”
不是 code 标签坏了,而是生成器把模板占位符当成了普通文本原样输出。比如你在 Eleventy 的 Markdown 里写 {{ title }},又没配好模板引擎,结果页面里真出现 {{ title }} 字符串;或者 Hugo 模板中写了 <code>fetch(),但 code 被 HTML 压缩器误删了闭合标签。
- Eleventy 默认用 Liquid 或 Nunjucks,
{{ title }}必须放在支持该引擎的 .njk 或 .liquid 文件里,不能塞进纯 .md 文件后指望它自动解析 - Hugo 的
{{ .Title }}只在.html模板中生效,写在content/posts/my-post.md的 front matter 之外,就是普通字符串 - 某些 SSG 插件(如
@11ty/eleventy-plugin-syntaxhighlight)会自动包裹<pre class='brush:php;toolbar:false;'></pre>,但前提是代码块用 ```js 开头——如果手写 <code>console.log()却漏了pre,就只是个行内标签,不会高亮也不会保格式
在 Markdown 内安全使用 code 的实操要点
大多数 SSG(Jekyll、Hugo、Eleventy)都支持 Markdown 渲染,而 `inline code` 和 ```block``` 是由 Markdown 解析器转成 <code> 和 <pre><code> 的,这步必须成功。
- 确认你用的 Markdown 库(如 remark、marked、kramed)没有禁用
code解析 —— 比如 Eleventy 默认用markdown-it,它默认开启highlight选项,但若你手动覆盖了配置,可能关掉了 - 避免在 Markdown 的
code片段里混用模板语法:`{{ env.NODE_ENV }}`会被当成字面量,除非你用的是支持嵌套解析的引擎(如 Nunjucks + markdown-it-nunjucks 插件) - 如果要展示带
、<code>>的 HTML 片段,必须手动转义:<div class="btn">,否则 Markdown 解析器可能提前截断或报错
HTML 压缩器对 code 的破坏行为与绕过方式
像 html-minifier-terser 或 Hugo 内置压缩,默认会删掉 code 标签的空白、合并属性、甚至误删未闭合的 <code>——尤其当它出现在 script 或 template 块里时。
立即学习“前端免费学习笔记(深入)”;
- Eleventy:在
.eleventy.js中配置htmlminifier时,加ignoreCustomFragments: [//, /<code>[\s\S]*?/],防止正则误杀 - Hugo:设
minify = false或改用minifyJS = false,因为它的 HTML 压缩和 JS 压缩耦合太紧,开 JS 压缩常连带崩掉code结构 - 通用原则:
code内容别依赖缩进或换行来表达语义;多行代码一律走```lang块,让 Markdown 解析器统一处理,别手写<pre class='brush:php;toolbar:false;'></pre>
最容易被忽略的是:SSG 构建日志里根本不会报 code 相关错误。它出问题时,只是页面上少了一段等宽文字,或者高亮没了——得靠肉眼比对源文件和生成后的 HTML,再查构建链路中哪一层把 code 当作了无意义标签给 strip 掉了。



















