hexo 使用 hexo-pangu-spacing 的坑
TLDR
不要使用hexo-pangu-spacing
,可以由主题配置文件打开pangu
发现
这个坑是在写关于界面的时候发现的,当时想使用markdown中的删除线,然后发现发布的时候有一半波浪线变成了中文,让我深感疑惑
现象
一番测试之后发现,出现在中文后的波浪线就会变为中文符号,而那些保持为英文的符号会和紧邻的中文中出现一个空格
你好
会处理成
** 你好 **
而加了空格之后在html中是不会加粗的
排查
当时首先怀疑是不是pandoc解析的问题,加了一些log后发现pandoc拿到的data已经不对了。单独使用pandoc将md转为html也没有问题
然后怀疑是不是pangu的问题,在主题配置文件中把pangu设为了false依然有这个问题,这让我直接排除了pangu这个正确答案
定位
经过一番加日志的操作,最终定位到了node_modules/hexo/lib/hexo/post.js
文件中的如下代码
1 | return promise.then(content => { |
我发现在execFilter
之前data
还是正确的,但之后就不正确了,说明问题出在execFilter
中
我搜索到了好几个before_post_render
场景中出现的filter,最终发现问题出在node_modules/hexo-pangu-spacing/index.js
的如下代码中
1 | hexo.extend.filter.register('before_post_render', function(data) { |
正是这句spacing导致了问题,注释掉之后就正常了
看到这里有人可能会说不对啊之前把pangu关了不是没问题吗???
我对此也产生了疑问,于是我把next主题配置中的pangu关了又试了一次,惊奇地发现关了之后居然输出了加在pangu里的日志!!!
这说明主题配置中的pangu和hexo-pangu-spacing
插件没有关系
解决
查阅相关pangu文档后发现pangu不支持直接对markdown使用
hexo-pangu-spacing
在render之前直接调用pangu是有问题的,于是我把这个插件卸载了
如果要用pangu的话直接在主题配置文件里打开即可
经验
这番排查给了我一些找渲染问题的经验,在此记录如下
可以使用hexo render指令渲染文件(但在此例中没有用处,因为是filter而非renderer出了问题,所以单独渲染反而没有问题)
generate时可以加上--debug参数获得更多日志