Hexo更新踩坑实录

Hexo更新与踩坑记录

前言

很久没有更新过博客了,上一次更新还是在2年半前。自己的研究方向也从推荐系统转到了CV转到了NLP,属于是交叉复合型菜鸟了。最近想更新一下About Me,结果发现Hexo的版本和Node.JS的版本对不上号了。于是根据网上的指引准备升级一下Hexo,结果发现事情并没有这么简单orz。

更新Hexo只需要一行命令吗

看了一下官网上的版本对应关系,我这么高的Node版本装个最新的Hexo绰绰有余啊。Intuitively,最简单的办法就是使用npm了。新建一个终端,命令敲进去:

1
npm update hexo

以及

1
npm update hexo-cli

轻轻松松嘛。hexo -v 看看版本,Hexo-cli确实是最新的。

But当我到博客目录下面运行生成和部署代码时,居然报了一样的错。赶紧 hexo -v查一下成分,发现这版本还是我之前的旧版本啊,啥情况?``

碰到这种问题我的解决方法就是uninstall && install。先把hexo删了然后官网重装一下:

1
2
3
4
npm uninstall hexo
npm uninstall hexo-cli
##官网的安装方法
npm install -g hexo-cli

OK装好了,但是博客目录下再试一次还是报错了。

纳尼?情报是假的?

npm还分global和local

我研究了一下目录,发现有一个package.json文件,里面记录了使用的包的版本,旧版本的hexo赫然在列,一定是哪里出了问题。

接着我看了一下node_modules这个文件夹,发现里面装了很多包,也许是这里出了问题。会不会npm会安装到不同地方啊?官网上的安装为什么还要带一个 -g呢?

参考这篇博文,我们可以发现 npm install有三种形态:

  • npm install -g 表示全局安装。
  • npm install会安装到当前目录下。
  • npm install --save 会自动修改package.json文件,并安装到当前目录下。

所以说很有可能我之前在当前目录下安装了Hexo,然后我一直更新的是全局的Hexo,所以没有起作用。那简单啊,删了当前目录再重装呗。然而事情还是没这么简单,虽然现在在博客目录下的Hexo已经是最新了,但是还是报错。

Node.JS这么难弄吗

翻阅了几个帖子,有可能是我的Node版本太高了,导致兼容性问题。根据大家的意见,我决定将Node版本降低到12.x。根据习惯,我直接Homebrew了,但是安装速度感人,原因是我的系统太古老了,Xcode也不能更新,Homebrew不太支持了。的确,我可能已经3~4年没有更新过系统了,系统还停留在Catalina时代,落后几个版本啦。经过慎重考虑和对于自己使用5年的MBP17的清楚认知,我认为MacOS 12.x系统是这台老古董的不二之选。清理出一大块磁盘空间,安装好新系统,更新Xcode,又可以开始装Node.JS了。这次Homebrew的速度很快,但是还是会有问题。

我又搜索了一下手动下载Node.JS的方法,看到了nvm这个软件。nvm可以理解成anaconda,能够在很多个Node版本之间切换。参考Github仓库Mac上下载nvm也只需要一行代码。安装好之后我新装了一个12.x版本的node,然后顺利下载了Hexo-cli以及一些必要的插件。博客终于更新成功了,但是怎么还是推不上github呢?

Github的ssh怎么还能有问题

我回忆起多年前收到的邮件,我的ssh密钥好像过期了。那重新弄一个呗,反正公私钥生成也不难。参考官方链接,手动生成并将公钥给github即可。但是流程走完了,测试ssh -T git@github.com能成功,博客还是deploy失败是什么情况?

尝试了一下,我发现我在多个终端里面测试链接时而成功时而失败,这就很离谱。查了一些资料我发现官网给的添加密钥操作是ssh-add --apple-use-keychain ~/.ssh/id_ed25519,而有些帖子里面使用的是ssh-add ~/.ssh/id_ed25519,不知道是不是这个问题导致失败。但是我在修改命令之后确实能接成功了,那就可以咯。

总结

总结一下,这次折腾的教训就是还是不要想当然,有些命令确实差距很大,还是得去查一下具体意思。不过这次折腾的好处就是我把系统更新了,很多库也弄好了,博客也可以正常更新了,算是不错的结果吧!

Author: Jiaming Luo
Link: http://wanpiqiu123.github.io/2023/03/12/Hexo%E6%9B%B4%E6%96%B0%E8%B8%A9%E5%9D%91%E5%AE%9E%E5%BD%95/
Copyright Notice: All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.