











在使用 Hexo 撰写技术博客时,常规流程是通过 CLI 命令快速创建草稿或文章:
1 |
|
正常情况下,Hexo 应该依据全局配置的 date_format 与 time_format,自动将当前系统的真实时间写入 frontmatter 的 date 字段。但在异常配置下,生成的文件顶部却呈现如下异常:
1 | --- |
此时不仅时间戳缺失,甚至连传给 CLI 的文章标题也一同损坏。博主每次新建文章都不得不手动删除冗余字符,并人肉打上 YYYY-MM-DD HH:mm:ss,严重拖慢写作节奏。
这一诡异故障由 模板引擎变量匹配失败 与 YAML 语法容错回退 叠加引发:
Hexo 的脚手架系统(位于站点根目录的 scaffolds/ 文件夹)底层依托模板引擎(如 Nunjucks / Swig)对文件进行编译。
在标准规范中,变量占位符必须为严格闭合的双花括号:
{{ date }} 和 {{ title }}{ { date } } 和 { { title } }(花括号之间多了一个空格)一旦花括号之间存在空格,模板引擎的正则解析器便无法匹配到变量标识符,模板变量直接原样穿透,未被替换为实际的当前时间字符串。
未被替换的 { { date } } 随后被交给 Hexo 的 YAML 解析库(js-yaml)。
在 YAML 语法中,花括号 {} 代表内联映射(Flow Mapping,即 JSON 格式的对象)。当解析器读到:
1 | date: { { date } } |
解析器将其理解为:一个名为 date 的键,其值是一个内联字典,而这个字典的 Key 本身也是一个字典对象。在 JavaScript 的运行时中,一个对象作为字典的 Key 时会被强制执行 toString(),从而变为 "[object Object]"。当 Hexo 把这个内存对象重新序列化写入磁盘文件时,就变成了:
1 | date: |
定位到原因后,修复过程非常简单且直接。
检查项目根目录下的 scaffolds/ 目录,重点排查默认的 post.md:
1 |
|
确保花括号内侧无多余空格,且建议将 title 用英文双引号包裹(防止文章标题中包含冒号、方括号等字符导致 YAML 语法报错)。
如果你为博客配置了多种专有模板(例如 troubleshooting.md、devlog.md、tutorial.md),确保每一个脚手架文件中的 date 均声明为 {{ date }}。
例如本站的排坑笔记脚手架 scaffolds/troubleshooting.md:
1 | --- |
1 | npx hexo new troubleshooting "终端网络连接超时排查" |
1 | --- |
_config.yml:1 |
|
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。