Updated to Hexo 3 from 2

我一直在用的静态博客框架 Hexo,在今年 3 月份大版本升级到了 3.0 版。一直没有从 2.x 升级到 3.x,今天升级并迁移到了最新的 3.1.1,了解了一下 3.x 的变化。
官方提供了迁移文档,升级过程很顺畅,安装 hexo-cli 时果然如文档所说 “error occurred”,把老版本的 hexo 先删掉就好。

有一个地方文档中并未提及,需要格外注意:除了安装 hexo-cli 之外的步骤,都应该在你的 blog 根目录下进行。这也反映出了新版本最大的变化:模块分离。

首先可以看到,新版本多了一个 hexo-cli,也就是 Hexo command line interface,这也是新版本中唯一需要安装到系统全局的模块。把 CLI 从主模块中分离,可以让 CLI 加载更快,同时能够允许你在不同的目录下维护着不同版本的 hexo blog。

而其他所有模块,包括 hexo, hexo-server, hexo-deployer, hexo-generator, hexo-renderer 等,都被安装在某一个 blog 的 node_modules 目录下,仅应用于这一个 blog。

模块分离有利有弊,但大多数情形下是利大于弊的。对于 hexo 来讲,带来最大的利就是,blog 目录下包含着所有需要的内容和程序,受系统环境的限制就能做到尽可能的小。而先前版本的 hexo,blog 目录中仅包含所有的内容,而并不包含程序 – 程序需要调用系统中安装的。设想一下,Alice 在 Bob 家度假,突然想用 Bob 的个人电脑写个博客(假设 Alice 没有带自己的笔记本)。Alice 平常用的是 2.x 版本的 hexo,并把 blog 目录同步到了 Dropbox。而 Bob 用的是 2.y 版本的 hexo,2.x 和 2.y 版本是不完全兼容的。于是,当 Alice 在自己的 blog 目录下执行 hexo 的命令时,可能会出现一些意想不到的错误 – 内容是 2.x 版本的,而程序是 2.y 版本的。

而如果它们都用了现在模块分离程度更高的版本,那么在 Alice 的 blog 目录中,就同时包含了 3.x 版本的内容和 3.x 版本的程序,虽然 Bob 的电脑上是 3.y 版本,但这并不影响什么 – 因为唯一需要依赖系统的是 hexo-cli,而这个 hexo-cli 只是一个 driver,具体的功能实现都将由 blog 目录中的程序接管。而由于这个 hexo-cli 功能非常简单,所以可以做到非常稳定,不同的版本基本上可以完全兼容。

这样的大版本更新也是有些副作用的,比如由于 hexo-deployer-git 模块也改变了,之前的 git 提交历史都没有了…