现象
在使用hexo渲染博客时,发现有个页面渲染报错,如下所示
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54
| INFO Start processing ERROR { err: YAMLException: bad indentation of a mapping entry (1:22) 1 | title: hexo title 包含 : 冒号导致的错误 --------------------------^ 2 | date: 2022-08-16 14:37:37 3 | tags: at generateError (/Volumes/external/git/bivana_blog/node_modules/js-yaml/lib/loader.js:183:10) at throwError (/Volumes/external/git/bivana_blog/node_modules/js-yaml/lib/loader.js:187:9) at readBlockMapping (/Volumes/external/git/bivana_blog/node_modules/js-yaml/lib/loader.js:1182:7) at composeNode (/Volumes/external/git/bivana_blog/node_modules/js-yaml/lib/loader.js:1441:12) at readDocument (/Volumes/external/git/bivana_blog/node_modules/js-yaml/lib/loader.js:1625:3) at loadDocuments (/Volumes/external/git/bivana_blog/node_modules/js-yaml/lib/loader.js:1688:5) at Object.load (/Volumes/external/git/bivana_blog/node_modules/js-yaml/lib/loader.js:1714:19) at parseYAML (/Volumes/external/git/bivana_blog/node_modules/hexo-front-matter/lib/front_matter.js:69:23) at parse (/Volumes/external/git/bivana_blog/node_modules/hexo-front-matter/lib/front_matter.js:50:12) at /Volumes/external/git/bivana_blog/node_modules/hexo/lib/plugins/processor/post.js:93:18 at tryCatcher (/Volumes/external/git/bivana_blog/node_modules/bluebird/js/release/util.js:16:23) at Promise._settlePromiseFromHandler (/Volumes/external/git/bivana_blog/node_modules/bluebird/js/release/promise.js:544:35) at Promise._settlePromise (/Volumes/external/git/bivana_blog/node_modules/bluebird/js/release/promise.js:604:18) at Promise._settlePromise0 (/Volumes/external/git/bivana_blog/node_modules/bluebird/js/release/promise.js:649:10) at Promise._settlePromises (/Volumes/external/git/bivana_blog/node_modules/bluebird/js/release/promise.js:729:18) at Promise._fulfill (/Volumes/external/git/bivana_blog/node_modules/bluebird/js/release/promise.js:673:18) at PromiseArray._resolve (/Volumes/external/git/bivana_blog/node_modules/bluebird/js/release/promise_array.js:127:19) at PromiseArray._promiseFulfilled (/Volumes/external/git/bivana_blog/node_modules/bluebird/js/release/promise_array.js:145:14) at PromiseArray._iterate (/Volumes/external/git/bivana_blog/node_modules/bluebird/js/release/promise_array.js:115:31) at PromiseArray.init [as _init] (/Volumes/external/git/bivana_blog/node_modules/bluebird/js/release/promise_array.js:79:10) at Promise._settlePromise (/Volumes/external/git/bivana_blog/node_modules/bluebird/js/release/promise.js:601:21) at Promise._settlePromise0 (/Volumes/external/git/bivana_blog/node_modules/bluebird/js/release/promise.js:649:10) { reason: 'bad indentation of a mapping entry', mark: { name: null, buffer: 'title: hexo title 包含 : 冒号导致的错误\n' + 'date: 2022-08-16 14:37:37\n' + 'tags:\n' + ' - hexo\n' + 'categories:\n' + ' - 技术\n' + 'keywords:\n' + ' - 冒号\n' + ' - title\n', position: 21, line: 0, column: 21, snippet: ' 1 | title: hexo title 包含 : 冒号导致的错误\n' + '--------------------------^\n' + ' 2 | date: 2022-08-16 14:37:37\n' + ' 3 | tags:' } } } Process failed: %s _posts/技术/hexo/hexo_title_quato.md INFO Files loaded in 3.38 s INFO 0 files generated in 3.53 s
|
几个关键的错误信息为
1 2 3 4
| err: YAMLException: bad indentation of a mapping entry (1:22)
snippet:
|
第一行告诉我们,这是YAML异常
第二行告诉我们,可呢个是title这里出错了
经过测试,在title里去除:冒号
后正常,确认是:冒号
导致的异常
原因
其实报错信息已经告诉我们了
- hexo的元数据title,date,tags这些,使用的是yaml语法描述
- yaml的kv使用的就是
:冒号
这个关键字,因此在value值这里,是禁用:冒号
这个关键字的,想更加了解yaml,可以查看yaml官网,结构语法可以查看第 6 章结构产品,其中和本次错误相关在Indicator Characters这里.
- 由于在title文章标题里使用了
:冒号
,导致了yaml的解析异常
解决方案
知道了原因,解决方案就简单了,解决方案有2种
- 使用
‘’单引号
或""双引号
把title后面的值围起来即可1
| title: 'hexo title 包含 : 冒号导致的错误'
|
- 使用html字符替换,其中
:冒号
对应的html字符为:
,其他的html字符体可以参考html转义字符大全1
| title: hexo title 包含 : 冒号导致的错误
|
本人推荐使用方案1
参考文章