hexo多终端同步

简介

hexo的安装还是很简单的,操作也很傻瓜式。常用的基本就下面几个命令

  1. hexo s
    s即server,默认在localhost:4000启动服务器,在浏览器中即可看到效果,可以通过-p选项指定端口。
  2. hexo d
    d即deploy(部署),上传到服务器。一般会加上-g选项在本地生成静态文件。如果不上传服务器,可以直接hexo g生成静态文件。
  3. hexo clean
    删除本地md文件后如果不clean后重新生成,首页可能不会更新。
  4. hexo new
    新建博客,后接博客名,比如hexo new "test",此时hexo框架就会自动生成md文件。自动新建的md文件会生成一些模板信息,因此最好使用命令新建博客。生成之后,用vim等本地编辑器修改即可。
    另外在_config.yml设置post_asset_folder为true,则hexo new会新建md文件的同名目录用来存放图片,并且作为图片的默认路径,也就是说如果待插入图片放在该目录下,路径直接写文件名即可。

至于其他命令可以参考hexo中文文档_config.yml的配置也有较为详细地注释。

新建分支保存源码

hexo是将Markdown文本和图片生成静态网页上传至github的。
master分支目录

上图所示目录即hexo d -ghexo g在本地生成的静态文件,为public子目录。hexo d即上传该目录到仓库master分支。
而博客目录是保存在source/_posts目录下的,因此需要在git仓库中新建一个分支保存博客源文件。创建过程如下

1
2
3
4
5
6
7
git init
git add source themes _config.yml package.json
git commit -m "blog source"
git branch hexo
git checkout hexo
git remote add origin git@github.com:BewareMyPower/BewareMyPower.github.io.git
git push origin hexo

普通的git命令,初始化、添加、提交、创建分支、切换分支、添加远程仓库、推送分支到该仓库。完成后远程仓库hexo分支如下图所示。
hexo分支目录

新环境下部署博客并添加新博客

首先克隆源码分支。

1
git clone -b hexo git@github.com:BewareMyPower/BewareMyPower.github.io.git

由于hexo分支仅仅是源码,缺少了将源码转换成网页的nodejs模块(即hexo),所以需要安装hexo在该目录。

1
2
3
cd BewareMyPower.github.io/
npm install hexo
npm install

然后会发现目录下多了个node_modules目录,即保存nodejs相关模块。
注意后面一个npm install不可少!否则会缺少某些模块,比如缺少hexo-asset-image模块导致图片无法显示。
此外无论是生成静态文件还是启动服务器,源码目录不受影响,因此可以放心大胆地操作。

1
hexo new "hexo多终端同步.md"

边修改边hexo s查看效果,直到修改完毕,便可以上传了,当然,也是分为上传源码到hexo分支和上传编译后静态文件到master分支这两步。

1
2
3
4
git add source/_post/多终端同步.md source/_posts/hexo多终端同步
git commit "new blog"
git push origin hexo
hexo d

其他问题

之前在阿里云上hexo init出错

1
2
3
4
> nunjucks@3.1.3 postinstall /root/hexo/node_modules/nunjucks
> node postinstall-build.js src

sh: 1: node: Permission denied

原因是我是root用户,而npm的默认用户ID是500,因此要设为0。可以直接修改.npmrc文件,也可以npm config命令修改:

1
2
3
4
5
~# npm config set user 0
~# npm config set unsafe-perm true
~# cat .npmrc
user=0
unsafe-perm=true

hexo博客置顶需要修改npm模块代码,修改node_modules/hexo-generator-index/lib/generator.js如下,按照top值排序

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
26
27
28
29
30
31
32
33
'use strict';

var pagination = require('hexo-pagination');

module.exports = function(locals) {
var config = this.config;
var posts = locals.posts.sort(config.index_generator.order_by);

posts.data = posts.data.sort(function(a, b) {
if(a.top && b.top) {
if(a.top == b.top) return b.date - a.date;
else return b.top - a.top;
}
else if(a.top && !b.top) {
return -1;
}
else if(!a.top && b.top) {
return 1;
}
else return b.date - a.date;
});

var paginationDir = config.pagination_dir || 'page';

return pagination('', posts, {
perPage: config.index_generator.per_page,
layout: ['index', 'archive'],
format: paginationDir + '/%d/',
data: {
__index: true
}
});
};

比如我这篇博客的top设置为0。

1
2
3
4
5
6
---
title: hexo多终端同步
date: 2018-10-15 20:07:19
tags: 搭环境
top: 0
---