Hexo搭建静态博客以及优化(转)

首先,这不是一篇详尽的完整的教程,只是记录大致的hexo建站流程以及自己折腾的过程。因为网上关于hexo的教程已经太多,一搜一大把。但是我还是推荐英文尚可的直接阅读hexo作者的文档,因为很多教程也只是一知半解,还是看作者文档来的比较彻底。另外,hexo源代码开源,实在不行还可以去hexo的github去提issue

折腾的成果就是你现在看到的这个博客,所以这里本身就是一个demo。^_^

p.s. hexo作者据说是台湾的一名在校学生…… T_T 努力吧少年……

建站流程

1. 安装node.js以及git

自行Google,嘿嘿,^_^。

2. 安装hexo

1
$ npm install -g hexo

3. 部署github pages

3.1 github建立repo

以下二选一。

  • 建立一个 username.github.com 的repo,username为你的github用户名,每个用户只能有一个这样的repo,则直接发布到master分支即可。
  • 建立一个项目repo,发布的branch是gh-pages.

自定义域名

如果你用自定义域名的话,github pages需要你建立一个名称为CNAME的文件,里面放入你的域名地址。如我的CNAME文件.

因为每次deploy的时候hexo都会重新生成文件,所以直接加在github是不好使的,这个文件需要放在 hexo folder/source文件夹根目录下。

3.2 hexo配置deploy信息:

修改在blog根目录下的_config.yml,添加repo地址:

1
deploy:
  type: github
  repository: https://github.com/[username]/[reponame].git

References:
[1] github pages help
[2] hexo Deployment Docs
[3] 想用BAE的可以看这篇:在BAE上使用hexo搭建博客

4. hexo基本操作

  • 新建博客
  • 1
    $ hexo init <folder>

在该目录下就建立了你的hexo blog.

  • 新建文章
1
$ hexo init <title>

会在source/_post新建一个名为 title.md 的文章,用喜欢的编辑器打开就可以用markdown语法写文章了。

  • server
    1
    $ hexo server

就可以在 localhost:4000/ 查看你的博客。

  • generate & deploy
    1
    $ hexo generate
    $ hexo deploy

或者(以下这俩效果是完全一样的)

1
$ hexo generate --deploy
$ hexo deploy --generate

折腾

插件 plugins

  • rss生成 hexo-generator-feed
  • sitemap hexo-generator-sitemap

添加插件的基本操作是:

1
$ npm install <plugin-name> --save
$ npm update

然后修改blog根目录下的_config.yml,添加:

1
plugins:
- plugin-name

插件部分详见:https://github.com/tommy351/hexo/wiki/Plugins

组件 widgets

  • 关于 about me [1]
  • 日历 calendar [2]
  • 返回页面顶部 Scrolltop [2]
  • 微博秀 weibo show [3]

其他调整

  • 去掉addthis和Disqus
  • 添加多说 [1]
  • 添加百度统计 [1] 和Google Analytics
    原先一直用GA然后现在两个都用是打算对比一下。。
  • 自动附上博客文章源码的github地址
  • 添加social icons
  • 样式微调
  • 字体微调 [1]

优化调整参考了:
[1] jim-liu的优化版light theme
[2] 净土howiefh
[3] 微博开放平台

其他

源代码管理

由于我用的github pages所以发布是会发布到gh-pages分支,而我用这个博客repo的master分支管理整个博客的源代码。这样就可以轻松的实现不同电脑的同步了。
本博客的源代码:https://github.com/wileam/code/

发布显示更多

在你觉得适合的位置插入

<!-- more -->

就会将之前的部分生成摘要。点击”阅读全文“才会看到全文。

YAML

hexo文章的头部文件是用YAML来写的,比如文章要同时标记多个tags,就需要用

tags: [tag1, tag2]

或者

tags:
- tag1
- tag2

这样的语法来写,详见YAML的wikipedia.

ejs和stylus

hexo是用的ejs和stylus。同样如果习惯用LESS之类也可以装相应的plugins.

ejs是embedded javascript,从js文件中抽取出html结构,使代码结构清晰简洁易读。(其实我还不太明白所以没怎么改ejs……)
文档存备用:https://code.google.com/p/embeddedjavascript/w/list

stylus是和less/sass类似的一个css processor,比原生的css更简洁一些。
同样文档存备用:http://learnboost.github.io/stylus/

mathjax数学公式

有时候,我们还需要一些高级功能,比如在网页上显示数学公式。
新建一个文件themes/pacman/layout/_partial/mathjax.ejs,找到mathjax的调用代码复制到文件。

1
<!-- mathjax config similar to math.stackexchange -->

<script type="text/x-mathjax-config">
  MathJax.Hub.Config({
    tex2jax: {
      inlineMath: [ ['$','$'], ["\\(","\\)"] ],
      processEscapes: true
    }
  });
</script>

<script type="text/x-mathjax-config">
    MathJax.Hub.Config({
      tex2jax: {
        skipTags: ['script', 'noscript', 'style', 'textarea', 'pre', 'code']
      }
    });
</script>

<script type="text/x-mathjax-config">
    MathJax.Hub.Queue(function() {
        var all = MathJax.Hub.getAllJax(), i;
        for(i=0; i < all.length; i += 1) {
            all[i].SourceElement().parentNode.className += ' has-jax';
        }
    });
</script>

<script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML">
</script>

在themes/pacman/layout/_partial/after_footer.ejs 的最后一行,增加对mathjax的引用。

1
<%- partial('mathjax') %>

我们修改文章:source/_posts/test-mathjax.md
增加公式:

1
### 公式
$$J\_\alpha(x)=\sum _{m=0}^\infty \frac{(-1)^ m}{m! \, \Gamma (m + \alpha + 1)}{\left({\frac{x}{2}}\right)}^{2 m + \alpha }$$

公式

$$J_\alpha(x)=\sum _{m=0}^\infty \frac{(-1)^ m}{m! \, \Gamma (m + \alpha + 1)}{\left({\frac{x}{2}}\right)}^{2 m + \alpha }$$
效果截图:
mathjax

markdown

参见markdown syntax,或者我之前的博客,markdown语法

疑似bug

如果更新了css文件,那么需要把public的css文件删除,然后

1
$ hexo deploy --generate

这样才会重新生成新的文件。我试了好几次都是这样,不知道是不是bug……


本文源码:https://github.com/wileam/code/blob/master/source/_posts/build-a-hexo-blog-and-optimize.md