hexo g
会解析md文件, 生成html等静态文件, hexo d
就可以发布静态文件, 这两个命令可以使用hexo g --deploy
来代替
但使用一段时间后, 我发现hexo自带的发布命令并不好用, 于是我自己写了个发布脚本
为什么不好用
hexo g --deploy
的流程是这样的:
- 先把生成的静态资源放到public目录下(这是
hexo g
的作用) - 再把.deploy_git目录下清空
- 接着把public目录下的文件及非空的文件夹拷贝到.deploy_git目录下
- 最后根据_cofig.yml里的配置, 把静态文件推送到远程仓库
git push -u --force origin master
后面几步都是hexo d
的作用
那么, 这里就有3个问题:
- 为什么要做清空及拷贝到另一个文件目录的动作, 其实可以直接在public目录推送的
- 推送用了–force选项, 这样会把远程仓库的内容覆盖掉, 比如我在Github上建立README.md及CNAME文件, 则本地推送后这两个文件就没有了
那么, 其实我要做的, 就是少了清空及拷贝的动作, 以及推送时不覆盖远程的修改
自定义脚本
根目录下执行以下命令新建deploy.sh文件
1 | touch deploy.sh |
以下是脚本内容
1 |
|
cd 到 public目录下, 执行以下命令
1 | rm -fr * |
这样就可以在根目录下使用./deploy.sh
命令来发布Hexo博客啦
问题
其实上述方法有一个bug:
hexo clean
清除缓存时, 会把public目录删除掉的, 因此再次发布时, 需要重新到public目录下克隆远程仓库
虽说清理缓存并不常见, 但因为有这么个bug, 这折腾了半天, 好像效果并不咋滴呀😰
其他技巧
取消推送时的force选项
可以使用修改源码的方式
找到node_modules/hexo-deployer-git/lib/deployer.js这个文件, 找到如下行
return git('push', '-u', repo.url, 'HEAD:' + repo.branch, '--force');
把后面的, '--force'
删掉即可
return git('push', '-u', repo.url, 'HEAD:' + repo.branch);
发布静态文件时, 使用md所在的git的提交信息
注: 写博客我一共用到了两个git仓库
md等源文件在一个git仓库内
public目录下的静态文件在另一个git仓库内
默认发布时的提交信息是根据_config.yml文件的deploy
配置下msg
选项而来的, 如果_config.yml文件里没配置msg
选项, 就会是Site updated: YYYY-MM-DD HH:mm:ss
, 可以写个脚本每次发布动态编辑_config.yml文件, 提交信息与博客源码所在git的最新提交信息一致
根目录下执行以下命令新建deploy.sh文件
1 | touch deploy.sh |
以下是脚本内容
1 | hexo g |
发布时使用根目录下使用./deploy.sh
命令即可