Hexo遇到的坑

一、错误

写blog过程中,在执行hexo g时突然报错:

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
FATAL Something's wrong. Maybe you can find the solution here: http://hexo.io/docs/troubleshooting.html
Template render error: (unknown path) [Line 3, Column 158]
expected variable end
at Object._prettifyError (/Users/liqian/博客/hexo-blog/node_modules/nunjucks/src/lib.js:36:11)
at Template.render (/Users/liqian/博客/hexo-blog/node_modules/nunjucks/src/environment.js:524:21)
at Environment.renderString (/Users/liqian/博客/hexo-blog/node_modules/nunjucks/src/environment.js:362:17)
at Promise (/Users/liqian/博客/hexo-blog/node_modules/hexo/lib/extend/tag.js:66:9)
at Promise._execute (/Users/liqian/博客/hexo-blog/node_modules/bluebird/js/release/debuggability.js:313:9)
at Promise._resolveFromExecutor (/Users/liqian/博客/hexo-blog/node_modules/bluebird/js/release/promise.js:483:18)
at new Promise (/Users/liqian/博客/hexo-blog/node_modules/bluebird/js/release/promise.js:79:10)
at Tag.render (/Users/liqian/博客/hexo-blog/node_modules/hexo/lib/extend/tag.js:64:10)
at Object.tagFilter [as onRenderEnd] (/Users/liqian/博客/hexo-blog/node_modules/hexo/lib/hexo/post.js:230:16)
at Promise.then.then.result (/Users/liqian/博客/hexo-blog/node_modules/hexo/lib/hexo/render.js:65:19)
at tryCatcher (/Users/liqian/博客/hexo-blog/node_modules/bluebird/js/release/util.js:16:23)
at Promise._settlePromiseFromHandler (/Users/liqian/博客/hexo-blog/node_modules/bluebird/js/release/promise.js:512:31)
at Promise._settlePromise (/Users/liqian/博客/hexo-blog/node_modules/bluebird/js/release/promise.js:569:18)
at Promise._settlePromise0 (/Users/liqian/博客/hexo-blog/node_modules/bluebird/js/release/promise.js:614:10)
at Promise._settlePromises (/Users/liqian/博客/hexo-blog/node_modules/bluebird/js/release/promise.js:694:18)
at _drainQueueStep (/Users/liqian/博客/hexo-blog/node_modules/bluebird/js/release/async.js:138:12)
at _drainQueue (/Users/liqian/博客/hexo-blog/node_modules/bluebird/js/release/async.js:131:9)
at Async._drainQueues (/Users/liqian/博客/hexo-blog/node_modules/bluebird/js/release/async.js:147:5)
at Immediate.Async.drainQueues (/Users/liqian/博客/hexo-blog/node_modules/bluebird/js/release/async.js:17:14)
at runCallback (timers.js:694:18)
at tryOnImmediate (timers.js:665:5)
at processImmediate (timers.js:647:5)

我以为是node或者npm突然出了问题,因为每次在执行时hexo命令时,老是有一些warning

1
2
3
4
5
6
7
WARN  ===============================================================
WARN ========================= ATTENTION! ==========================
WARN ===============================================================
WARN NexT repository is moving here: https://github.com/theme-next
WARN ===============================================================
WARN It's rebase to v6.0.0 and future maintenance will resume there
WARN ===============================================================

还有:

1
2
found 1 low severity vulnerability
run `npm audit fix` to fix them, or `npm audit` for details

等等。但是我没有想到是文章部分出了错,因为我对node什么的一窍不通,只能通过google来配置各项操作。
于是稀里糊涂的百度了一下,这里发觉百度还是及其不靠谱的。

于是:

1. 我想到了重新配置node和npm

google了一下如何卸载node。貌似比较麻烦,详情请自行google,文章一大把。
然后通过brew重新安装node。由于我最开始的版本的node是通过去官网下载pkg包手动安装的,所以,卸载的时候可能没有卸载干净,导致安装node的时候并不顺利(所以以后尽量都用brew来安装)。
不顺利的地方:终端里会弹出来一些帮助你解决的命令,包括override啥的,就是覆盖掉原来没卸载干净的文件。这里当然是照做啊,然后你会遇到报错:/usr/local/…等地方的文件不能被覆盖,因为只能读不能写。我的解决办法是在finder中找到这个文件夹删掉,然后再重新执行安装及override命令。这个循环可能要重复几次才能完全重装好。

2. 重新安装hexo

安装好之后,这个坑依然还是存在。此时我淡定下来,开始google:expected variable end at Object._prettifyError,google搜索的内容非常重要,决定你是否能一下子就找到答案,同时提醒大家不要用百度搜索这类问题。
由于我搜索的内容很好,到岸一下子就把我带到了https://github.com/hexojs/hexo/issues/2384github的hexo的issues里了。自己想想,恍然大悟,既然是配置hexo的过程中出错了,当然第一步就是到其github的issues里找答案啊。

3. 问题解决了

在issues里,有人提了一个跟我一样的问题,在comment里看到作者的回复:The 双大括号 is nunjucks syntax, therefore please avoid using them in posts.

这里我不能直接打出双大括号,不然我这篇文章就会造成这个问题
于是,我快速的去查看了一下我的post。我记得是在添加了某一篇post之后遇到的这个问题,于是立马打开那篇post,发觉果然出现了双大括号这种东西。瞬间改掉,重新执行hexo g问题消失了。

二、总结

  1. 遇到问题了不要乱猜,需要有规则、有步骤、有条理的去分析问题。
  2. 像我这种突然遇到问题的,就应该用二分法、排除法来解决。因为我是在突然发布谋篇文章之后出现的问题,那我的就应该先把这篇文章删除之后重试一遍。
  3. 找这种技术问题一定要用google。搜索内容需要不断变化才能快速找到答案。同时有限到github的issues里去找答案。