大家知道,我是使用 Hexo 来构建我的静态站点的,每次使用 Markdown 语法书写 md 文档即可。写完后在本地使用 hexo g & hexo s 命令【在本地生成并且部署,默认主页是 localhost:4000】来验证一下是否构建正常。如果有问题或者对页面效果不满意就返回重新修改,如果没有问题就准备提交到 GitHub 上面的仓库里面【在某个项目的某个分支】,后续 travid-cli 监控对应的分支变化,然后自动构建,并推送到 master 分支。至此,更新的页面就发布完成了,本人需要做的就是管理书写 md 文档,然后确保没问题就提交到 GitHub 的仓库。
问题清单
前言描述的很好,很理想,但是有时候总会出现一些未知的问题,而我又不了解其中的技术,所以解决起来很麻烦,大部分时候都是靠蒙的【当然,也可以直接在 Hexo 的官方项目上提出 Issue,让作者帮忙解决】。下面就记录一些遇到的问题,以及我自己找到的原因。
1-Markdown 语法不规范
这个错误有在 travis 上面出现过,在 travis 的 116 号、117 号错误:https://travis-ci.org/iplaypi/iplaypi.github.io/builds/476399853 。
在使用 hexo 框架的时候,一定要确保 markdown 文件里面的代码块标识【标记代码的类型,例如:java、bash、html 等】使用正确。否则使用 hexo g 生成静态网页的时候,不会报错,但是却没有成功生成 html 静态网页,虽然 html 静态文件是有的,但是却查看不了,显示一片空白。
代码块示例:
Java 格式
xml 格式
bash 格式
例如我把图一的 java 误写成了 bash,hexo g 的时候没有报错,但是生成的 html 静态网页却是空白一片,打开了什么也看不到。
空白页面
但是如果把 java 误写成了 xml,在本地执行 hexo g 的时候不会报错,生成的 html 静态网页也是正常的。而一旦使用 travis-cli 执行自动构建的时候,构建是失败的【在 travis 的 116 号、117 号错误:https://travis-ci.org/iplaypi/iplaypi.github.io/builds/476399853 】,并且可以看到错误信息,图四,但是我看不懂错误原因,只能猜测找到问题所在,比较耗时。
travis-cli 报错日志【我看不懂】:
travis-cli 日志 1
travis-cli 日志 2
travis-cli 日志 3
此外,写 Markdown 文档,使用代码块标记的时候,使用 3 个反单引号来标记,如果不熟悉代码块里面的编程语言,可以省略类型,例如 java、bash、javascript,不要填写,否则填错了生成的 html 静态文件是空白的。还有就是如果代码块里面放的是一段英文文本,和编程语言无关,也不要填写类型,否则生成的 html 静态文件也是空白的。
2-Hexo 报错奇怪
这个错误还没有到 travis 上面,所以 travis 上面没有记录;
在本地测试过程中,无论是 hexo s 还是 hexo g 都会报错,错误信息如图:
看着这个信息,很像在当前项目的目录中找不到 hexo 命令,和 java 类似,我就怀疑是不是安装的 hexo 被什么时候卸载了,其实不是的,在其它项目中还能用。后来我发现是当前项目使用的模块缺失,为什么会缺失我也不知道,由于这些缺失的模块是通过 hexo 引入的,所以直接报错:hexo not found,给人以误导。
总的来说,就是报错有误导性,没有报模块缺失,而我又不懂这些,查了一些资料,手动测试了一些方法,总算找到原因所在。找到原因,那解决办法很简单了,直接安装缺失的模块即可,使用 nmp install 命令安装 package.json 里面的模块。
3-Hexo 配置错误引起的误导性
这个错误还没有到 travis 上面,所以 travis 上面没有记录;
这个错误和上面的类似,但是如果从报错信息上面看,也具有误导性。在更改了 _config.yml 配置文件后,按照正常步骤去生成、部署的时候【使用 hexo g & hexo s 命令,直接报错了,把我整蒙了,报错信息如下:
关键配置部分如下,后续找到问题确实出在这里:
从图中看信息,我也看不到什么原因,因为确实不懂。注意,我为了测试,发现 hexo g 是没有问题的,也就是生成没问题,那问题就出在部署步骤了,它会不认这个 hexo s 命令?我查了资料,发现大部分人都说缺失 hexo server 模块,我通过检查可以确保本机有这个模块,而且卸载了重新装,所以不是这个问题。
最后发现是配置信息里面的参数【官方定义的关键词】错误了,里面的 Plugins 这个参数应该使用首字母大写,这谁能想到,正确的配置参数如下图:
4-travis 配置问题
这个错误有在 travis 上面出现过,在 travis 的 27 号:https://travis-ci.org/iplaypi/iplaypi.github.io/builds/448152737 。
在使用 travis 自动构建时,有一次突发奇想,想使用最新版本的 node_js,于是在 travis.yml 配置文件中,把 node_js 设为了 stable,即稳定版本,这样在构建的时候会使用最新稳定版本的 node_js,没想到就出问题了。
node_js 的配置如下:
travis 报错日志如下:
重要部分:
1 | error nunjucks@3.1.3: The engine "node" is incompatible with this module. Expected version ">= 6.9.0 <= 11.0.0-0". Got "11.0.0" |
看来还是在搞清楚新旧版本之间的差异后再想着升级版本,不要随意来,要不然浪费的是自己的时间。后来解决办法就是手动指定 node_js 的版本。
5 - 无缘无故出现的问题
这个错误有在 travis 上面出现过,在 travis 的 133 号、134 号错误、135 号错误、136 号错误,举例:https://travis-ci.org/iplaypi/iplaypi.github.io/builds/498318318 ;
日志部分截图:
这错误信息里面对我来说确实看不到有效的内容,还没找到解决办法,看似是文件路径不存在,但是项目配置也没变过。
1 | npm ERR! path /home/travis/.nvm/versions/node/v10.10.0/lib/node_modules/hexo-cli/node_modules/highlight.js/tools/build.js |
等待找问题的原因。
好,仔细看了日志、找了博客文档,没有解决方法,我也不懂,看到可能是版本原因【我不能升级 nodejs 版本,与 yarn 有关】,可能是权限问题。我用 sudo npm install -g hexo-cli 试了试,明显不行:https://travis-ci.org/iplaypi/iplaypi.github.io/builds/498794142 ,然后我就放弃了,直接改回来提交了,没想到无缘无故就可以了,构建日志:https://travis-ci.org/iplaypi/iplaypi.github.io/builds/498796865 。
准备发邮件问问 travis 客服,我现在单方面怀疑是 travis 的环境问题或者构建脚本所依赖的环境问题。由于时差问题,先记录几个时区的缩写,方便查看邮件内容的时候核对时间:UTC【世界标准时间】、EST【东部标准时间,UTC-5】、CET【欧洲中部时间,UTC+1】。
我发送的邮件内容如下【发送于北京时间 2019-02-28 14:42:00】:
完整文字版供参考
1 | Automatic building is failed |
发送后对方自动有一个回复,告知我他们的工作时间【中国北京时间与对方时差 + 13】:
等了好几天,对方终于回复了【回复于北京时间 2019-03-04 11:00:00】,对方回复内容如下:
对方回复重要文字内容
1 | Hey there, |
看起来技术支持也没发现是啥问题,只是说有可能是 NPM 的问题,还给了一个链接:https://status.npmjs.org/incidents/ptnlj2rtwfwm,根据链接可以看到 NPM 的状态在某个时间点出问题了【时间点为 2019-02-27 15:46:00 UTC,也就是北京时间 2019-02-27 23:46:00】:
但是我那个自动构建的问题是出在北京时间 2019-02-26 凌晨的,时间点也对不上,所以技术支持只是怀疑,也没有结论,那我也就不管了,继续观察以后有没有相同的问题出现。
6 - 排版问题
1、在 Markdown 文件中关于链接的,要使用 []、() 这 2 个完整的标记,不要直接放一个链接出来,会导致生成的 html 文件带链接的内容居中对齐,导致文字分散开来,不好看。
2、中文括号不要使用,也会导致居中对齐的问题,文字排版不好看,使用方括号吧:【内容示例】。
7 - 草稿问题
我在使用 Hexo 的草稿功能时,发现一个问题,操作完成发布时,发现 Markdown 文档的头部描述信息变化了。例如我本来设置的 id 又变回了日期【可以理解,因为模板就是这样设置的】,然后 tags 的中括号中的标签变为了无需列表【不可理解】。暂时还没发现内容的变化,可能是内容中没有特殊符号。
导致的问题就是草稿发布后【内容已经变化了】,提交到 source 分支,自动构建时,提交到主分支 master 后,这些文章的链接变为了日期的乱格式【因为是基于错误的 Markdown 文件构建的】。所以以后还是不要使用草稿功能了,没有必要,还麻烦,没写完也可以发布嘛,没啥大问题。

