在配置Hexo的时候常常会出现一些问题,比如hexo d
无法部署,tags不自动生成,评论不正常显示等问题,本文给出了一些解决方案
Hexo
Hexo(Hail EXO,好吧这个我瞎编的)是基于nodejs的静态博客构建工具。由于Ruby的蜜汁信仰问题(而且windows下Ruby有点坑),我弃Jekyll投Hexo。
配置方法烂大街,这里不提了,可以去https://blog.lmintlcx.com/post/blog-with-hexo.html 这里看看。这次主要说一些可能遇到的问题。
常见错误
git问题
常见错误1
1
2event.js:72
throw er;// Unhandled 'error' event常见错误2
1
Error: fatal : Not a git repository (or any of the parent directories): .git
解决方法:检查自己的.git文件夹是否在.deploy_git下,否则重新
git init
git push出现问题
此类错误主要是1
2
3Failed to connect to github.com port 443: Timed out
OpenSSL SSL_read: Connection was aborted, errno 10053
Error: send-pack: unexpected disconnect while reading sideband packe解决方案考虑几点
1
2
3
4git config --global http.postBuffer 524288000
git config --global http.sslVerify false
// v2ray的sock5的端口+1是http端口
git config --global http.proxy http://127.0.0.1:10802还需要
git remote -v
看一下是不是没有设置remote,没有的话得remote add下。
tags问题
http://www.calvinneo.com/tags/ 不能正常显示tag
检查是否安装了必须的包
可以使用npm ls --depth 0
来查看依赖。1
2
3
4npm install hexo-generate-index --save
npm install hexo-generate-tags --save
npm install hexo-generate-category --save
npm install hexo-generate-archive --save检查是否配置了tags页面
检查/.deploy_git/tags下是否有index.html,这个是不会自动生成的,在命令行输入:1
hexo new page tags
该命令/source/tags/目录下新建了index.md。打开文件,键入或修改:
1
type: "tags"
npm故障
可能会出现如下故障:
TypeError: Cannot read property ‘latest’ of undefined hexo
这可能是因为已经安装了以上npm包,所以不需要重复安装了。建议在hexo init
后直接npm install
即可。
生成的所有index.html为空
参看文章,如果NodeJS为14版本及以上,则需要降级为13版本及以下,或者升级hexo。后者我试了下,貌似没作用。
Something’s wrong 报错
下面的报错是因为某个代码块没有被注明语言。
1 | FATAL Something's wrong. Maybe you can find the solution here: http://hexo.io/docs/troubleshooting.html |
可以全局搜索 XXX\n.*XXX
来检查有问题的地方。其中 X 代表一个反引号。
如果确定没有,则可以 hexo clean 下。
NexT主题问题
使用多说
NexT主题使用多说插件有一些小注意点,比如说有些文章“喜欢”之后的分享转进来的链接是yoursite.com这个域下面的。打开duoshuo_shortname.duoshuo.com发现这些文章的地址也是yoursite.com。这个有三点原因:
- 检查site和theme的两个_config.yml中,是否url字段配置成自己的域名。
- 一旦同名文章添加进多说,其地址不会再次更改,因此要将多说中的文章先手动删除一下。
- 还有一种原因是文章的标题变动了,对于这种情况可以先
hexo clean
,再重新生成并部署。注意这时多说后台会生成一个新的文章,旧的文章并没有被替换。
设置网站的favicon
值得一提的是有一个方便的设置favicon的方法:
- 将所需图片如favicon.jpg复制到source下
- 在网站的_config.yml下输入
1
avatar: /favicon.jpg
sitemap网站地图
1 | npm install hexo-generator-sitemap --save |
可能产生错误:
- duplicated mapping key at … path: baidusitemap.xml
这是yaml的语法问题,比较简单的方法是直接去掉两个path中间的一个,每次只生成google或baidu的sitemap。当然你也可以把path缩进一下,这样就可以了。
Hexo s 命令不能在本地调试
首先检查是否安装了hexo-server。
其次不要在config里面显式用plugins指定插件。
vendors文件夹无法访问
vendors里面主要是脚本等东西,缺少之后网页无法显示。
f12看到整个vendors里面的东西都404了。
然后我在一个新建文件夹新建了文件*/test/1.txt*并deploy,发现以下错误:
既然确定了是github抽风了,就将网站搞一份到coding.net,可以使用下面配置:
1 | deploy: |
这边特别注意,里面一定要用空格而不是tab缩进。
然后更新dns,之前因为github不稳定,我常常使用ss代理访问,但是代理的dns不一定立即更新,鉴于目前在国内网站coding.net重新部署了,可以直接访问www.calvinneo.com
2016年11月10日更新:部署到coding之后vendors又被禁了。
真是醉了,后来想起来蒲神给我看了这个issue,从github下了最新版本的next,这个问题解决了,FYI,我原来的版本是5.0.0。值得注意的是蒲神也是next,一次没坏过(无敌了)。
然后在配置新版本的_config.yml的时候发现现在next可以支持MathJax和busuanzi了,之前我还一直手动的。
管理git文件夹
hexo clean
hexo clean
语句相当于重新init下git文件夹(这里应该是之前说错了,hexo init
是这样的,但是clean只清空缓存,是安全的),所以所有的历史会全部消失,因此需要慎重。如果仅仅是为了清理,可以选择对.git进行rebase等操作
压缩图片
如果git中跟踪大体积的图片会导致git文件夹变得很大,而有的托管网站的容量实际上是有限制的,所以应当将图片压缩,软件Antelope是一个简洁易用的压缩图片工具
icon和avatar
icon和avatar是不一样的,icon是favicon.ico决定的,显示在浏览器标签页的最左边(chrome),avatar是在_config.yml里面指定的,显示在侧边栏。
给Hexo(NexT)加上搜索功能
swiftype是大家都推荐的工具,我用了之后各种资源加载不了,而且他还是一个收费的工具,于是我换成了Local Search
根据https://github.com/iissnan/hexo-theme-next/pull/694上的介绍可以添加配置,还是非常简单的
但是配置完成之后发现并没有弹出搜索窗口,显示的是javascript:;
,然而根目录下的search.xml是存在的。后来f12发现是我在站点的配置文件中的swifttype_key
字段没有注释掉,于是相当于现在还是使用的swifttype搜索,于是注释掉之后重新hexo g
,再hexo s
就出现搜索框了
MarkDown
MarkDown表格写法
1 |
|
效果是这样的:
表头1 | 表头2 | 表头3 |
---|---|---|
aaaa | bbb | cc |
d | ee | fff |
Hexo中md文件转义的问题
这可能是某篇文章有字符未转义,出现解析错误
MarkDown存在的Bug
有些MD格式会出现Bug,例如在列表项里面的表格因为必须没有缩进,所以会破坏列表项的连续性,表格后的列表项会从1开始重新标号。
有的时候一段列表之后的新段会具有和列表项同样的缩进,即使中间插入了若干空行。
Error spawn git ENOENT问题
这个问题发生在我迁移整个hexo到另一台电脑上时。
MarkDown编译问题
很多时候hexo s造成的错误是markdown编译产生的,比如下面这个乱七八糟的错误,就是我在md里面写了一个用代码括号括起来的go数组造成的
1 | Template render error: (unknown path) [Line 305, Column 300] |
可以选择在 node_modules\hexo\lib\hexo\render.js
里面加个打印,看看是哪个文件的问题
1 | ... |
然后运行 hexo clean,再 hexo g 即可。
还有个错误是
1 | FATAL Something's wrong. Maybe you can find the solution here: http://hexo.io/docs/troubleshooting.html |
可以像这样打印出来就行。
1 | var mode_buffer = ''; |
MathJax
使用MathJax
首先要将hexo的_config.yml和next的_config.yml都设置为true。
然后next的_config.yml是默认给出了一个cdn去加载,但是我希望能够从本地加载(家里断网了),并且希望能够在用到的时候(流量有限)再加载这个模块。
配置本地的MathJax
根据这篇博文,解压下来居然有50M,真是吐血!
后来听从博客,放到theme的source目录下面的js里面了。配置可选的MathJax加载方式
根据这篇博文和这篇博文,在/themes/next/layout/_scripts/third-party
下面找到了mathjax.swig。swig表示这里是使用的swig模板语言(有的是使用的ejs模板语言)。
然后改成这样1
2
3
4
5
6
7
8
9
10
11
12{% if theme.mathjax.enable && page.mathjax %}
<script type="text/x-mathjax-config">
MathJax.Hub.Config({
tex2jax: {
inlineMath: [ ['$','$'], ["\\(","\\)"] ],
processEscapes: true,
skipTags: ['script', 'noscript', 'style', 'textarea', 'pre', 'code']
}
});
</script>
...
{% endif %}
注意swig模板语言不能在\{\% if \%\}
块里面嵌入\{\% inlcude \%\}
hexo部署本地MathJax
node内存溢出
在配置的时候我一开始是把它放在/source/cdn/mathjax/
目录下面的,我以为是这个原因,后来完全去掉这个模块还是不行,生成的db.json有150M炸了。
后来发现还真是因为那个文件+太大了的原因,导致第一次出现了Template render error: (unknown path)
错误,然后因为db.json生成太大了,下面再读取这个db.json的时候内存就直接爆炸了。而我移除模块之后,还要再clean一下,把那个超大的json去掉才行。
后来发现得放在theme/source/js
里面。
然后最好还要设置一下hexo的_config.yml里面的skip_render
,这个使用来跳过渲染的,否则hexo回自动帮你渲染页面。下面方法来自这里
单个文件夹下全部文件:
skip_render: test/*
单个文件夹下指定类型文件:skip_render: test/*.html
单个文件夹下全部文件以及子目录:skip_render: test/**
多个文件夹以及各种复杂情况:
1 | skip_render: |
静态文件过多
在把MathJax放在theme/source/js
里面以后在windows下hexo s
发现:
1 | Error: EMFILE, too many open files |
出现以上的错误信息,目前还没有找到解决方法。
Hexo Mathjax转义
部分LaTeX符号需要进行转义输入
LaTeX | Hexo+LaTeX |
---|---|
\ |
\\ |
\\ |
\\\\ |
_ |
\_ |
{ , } |
\{ , \} |
* |
\* |
Latex语法处理的问题
尽管可以通过转义,但很多时候,在涉及到下划线的时候,LaTeX可能仍然处理不正确。
此时,可以借助这一篇博客,进行操作。其实hexo-math可以不安装,即使装了,貌似也有问题。。。
主要是用hexo-renderer-kramed替换hexo-renderer-marked,但这样会导致已有的显示有问题。
我们可以用下面的几篇文章进行检查:
SEO
从这里看到可以在百度/谷歌“认领”自己的站点
注意在验证时需要将一个html文件放到网站根目录下面,但无论是填写skip_render
还是
1 | layout:false |
都做不到这点,后来发现对于next主题,放到主题的source文件夹下面就可以了。
当然也可以走DNS验证,或者修改主题,在上面加上meta标签。