今天决定折腾一下这个 github.io,想来想去只能做一个个人主页了,而且是静态的,于是选择了Hexo这款产品。
Hexo是基于NodeJS开发的一款命令行工具,本质上是从源到资源的转换工具。
初始化工作空间
Hexo的用户,也就是博主,使用Hexo工具处理一个空的文件目录,使得它变成一个符合条件的工作空间:
$ hexo init
配置主题
看了一些主题,选择了这款 yilia 作为自己博客的主题。
按照安装说明安装起来还是简单的,没有什么坑。
Notice: 博客根目录的
_config.yml
与 主题根目录的_config.yml
是不同的。
预览
Hexo的预览就是临时建立一个HTTP服务器,提供一个端口让你访问。
$ hexo server
这个时候还不会在public生成静态资源文件,要知道静态资源文件本质上是Hexo服务器处理源文件之后的产物,是一种缓存(Cache)。
发博文
博文在Hexo里面是不存在所谓数据库里的,而是以文件的形式存在source/_posts
里面,而且Hexo特别推崇Markdown,默认就是使用Markdown来保存博文。
$ hexo new [layout] <title>
$ hexo new hello-hexo # Create a post named hello-hexo, with file 'hello-hexo.md'
显然你是需要直接编辑这个文件来写博文的,Hexo并不提供一个Web页面来供你写博文,它甚至不提供一个登录页面!
静态资源生成
Hexo提供将这些资源处理生成一系列静态资源文件(到public
目录)的功能,这也是它的核心功能(如果没有这个,Hexo将毫无竞争力)。
$ hexo generate
$ hexo g # they are the same
听说它的生成算法是并行的,性能很高……现在我博文少尚不清楚,以后再看,咱们走着瞧。
这些静态资源是符合最一般的Web资源格式的,目录与URL路径一一对应,可以直接放到某个Web服务器容器中正常运作。
比如你可以把public
的内容整个拷贝到Nginx、Apache下定义的一个虚拟主机目录中(或者将它们软链接),它可以直接生效。
这就是Hexo被称为静态博客引擎的原因。
静态资源清理
静态资源的清理则使用另一命令:
$ hexo clean
与生成相反,它会直接把 public
目录整个删除。
部署
这里有一个深坑,很多人都被坑进去了,官方提供的部署命令有很大的问题。
$ hexo deploy
这个命令会各种出错,直到最后我也没有调出来,也不知道为什么会爆炸。
其实不管怎么样,思考一下部署的思路,自己实现一个部署脚本即可,所谓官方的部署指令,如果没用不要也罢。
部署就是把public中的文件传到某个Web容器中。
这里以github.io为例,我们要把public中的文件传到自己github.io的Repository中。
首先要在GitHub上建立对应的Repository,以我为例,在 zccz14账号下建立 zccz14.github.io 这个Repository。
注意不要把整个博客工作目录推到这个Repo里,这个Repo的内容包含且仅包含public目录中的文件。
现在我们需要建立一个本地git仓库与github对接:
$ mkdir .deploy_git # naming '.deploy_git' is to be compatible with the offical hexo deploy command
$ cd .deploy_git
$ git init # create a bare repo here
$ git remote add origin git@github.com:zccz14/zccz14.github.io.git # add remote URI
这样一来,.deploy_git
就与GitHub建立了联系,不直接使用public
目录的原因是hexo clean
命令会将public整个摧毁。
接下来我们只要每次将public
目录中的文件拷贝到.deploy_git
中,再使用Git命令就可以部署到GitHub上了:
$ cp -r public/* .deploy_git # or you can use hexo deploy instead
$ cd .deploy_git
$ git add .
$ git commit -m "update"
$ git push -u origin master # push it to GitHub
以上这部分命令就是 hexo deploy
主要完成的工作。