使用批处理和Joplin执行并优化Hexo博客工作流程

使用静态部署的方式使用Hexo,我们经常会遇到一个很烦人的问题,就是部署麻烦。
每次写一篇文章,就要经历Hexo clean、Hexo g、Hexo s、Hexo d四连,一开始还好,写多了之后烦不胜烦。

同时,由于我个人使用Joplin进行文章撰写,这个软件虽然简洁,但并不好用;图片虽然可以直接复制,但不能修改输出目录,图片资源默认保存在与/blog/平行的/_resources/文件夹中。

因此,结合我最为擅长的batch脚本语言,我就萌生了使用批处理来优化整个流程的想法。


1. Git安装配置(不确定是否有必要)

在安装Git的过程中,我们会有一个配置终端的过程,此处其实是建议选择第一项(使用MinTTY),但我当时选择了第二项即使用系统的cmd来作git bash的终端。
aca6779be5b5f5c9d88dc1215456c295.png
如果选择了第一项,可能也是能正常使用批处理来代替执行的,应该不用担心。


2. 站点配置

blog根目录下的_config.yml文件:

1
2
3
4
......
post_asset_folder: false
relative_link: false
......

使用Joplin写文章的话应该关闭这两项(至少我测试下来这样是没问题的)


3. 脚本编写

在blog根目录下新建“程序名.bat”,开始编写功能。
先放源码:

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
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
@echo off
setlocal EnableDelayedExpansion
goto start
:ac
rem 请设置%targetlable%变量,以确保正常跳转至目标位置
cls
color 0F
goto %targetlabel%
:start
if "%targetlabel%"=="" (set "targetlabel=start"&&goto ac)
echo ------------------------------------------------
echo 1.执行完整的检查和推送blog流程
echo 2.快速上载blog
echo 3.本地预览
echo 4.单独执行指令
echo ------------------------------------------------
echo.
choice /c 1234
if "%errorlevel%"=="4" goto new
if "%errorlevel%"=="3" (set "targetlabel=local"&&goto ac)
if "%errorlevel%"=="2" (set "targetlabel=fast"&&goto ac)
if "%errorlevel%"=="1" (set "targetlabel=full"&&goto ac)
pause&exit
:new
echo 正在创建新的cmd实例...
echo ------------------------------------------------
echo 命令提示:
echo hexo clean
echo hexo g
echo hexo s
echo hexo d
echo ------------------------------------------------
start cmd
echo 按任意键返回菜单...
pause >nul
set "targetlabel=start"&&goto ac
:local
echo ------------------------------------------------
echo 本地预览模式
echo ------------------------------------------------
echo 启动预览...
cmd /c "hexo clean & hexo g & xcopy D:\blog\source\_posts\_resources D:\blog\public\blog\_resources\ /e /s /y & echo 2>D:\blog\.deploy_git\.nojekyll & start http://localhost:4000/ & hexo s"
echo 按任意键返回菜单...
pause >nul
set "targetlabel=start"&&goto ac
:fast
echo ------------------------------------------------
echo 快速上载blog
echo ------------------------------------------------
cmd /c "hexo clean & hexo g & xcopy D:\blog\source\_posts\_resources D:\blog\public\blog\_resources\ /e /s /y & echo 2>D:\blog\.deploy_git\.nojekyll & hexo d"
echo ------------------------------------------------
echo 完成,2秒后退出...
ping localhost -n 3 >nul
exit
:full
echo ------------------------------------------------
echo 完整流程向导
echo0为确定,按1为跳过
echo ------------------------------------------------
goto clean
:clean
echo 第一步:清理缓存
choice /c 01
if "%errorlevel%"=="2" goto generate
cmd /c "hexo clean"
goto generate
:generate
echo ------------------------------------------------
echo 第二步:生成页面
choice /c 01
if "%errorlevel%"=="2" goto check
cmd /c "xcopy D:\blog\source\_posts\_resources D:\blog\public\blog\_resources\ /e /s /y & echo 2>D:\blog\.deploy_git\.nojekyll & hexo g"
goto check
:check
echo ------------------------------------------------
echo 第三步:本地预览
choice /c 01
if "%errorlevel%"=="2" goto deploy
start http://localhost:4000/
cmd /c "hexo s"
goto deploy
:deploy
echo ------------------------------------------------
echo 第四步:上传到远程服务器
choice /c 01
if "%errorlevel%"=="2" goto done
cmd /c "hexo d"
goto done
:done
echo ------------------------------------------------
echo 流程已完成,按任意键返回菜单...
pause >nul
set "targetlabel=start"&&goto ac

我自认为自己的批处理写得都算比较清晰的了,虽然注释很少,但结合文字应该能看懂每一步是在干什么。
如果要使用,请把里面所有的D:\blog\source\_posts\_resources替换为你Joplin每次导出时的资源目录,把所有的D:\blog\public\blog\_resources\替换为你的博客站点目录,注意不要动\public\...后面的内容。

如果要更换功能模块,也应按照这里的写法,使用 cmd /c 命令内容 & 第二条命令 & 后面的很多命令 来执行,除了start用于启动网页之外尽量不要直接在批处理中使用模块的命令,否则容易直接闪退。

创建.nojekyll文件的目的是防止GitHub忽略掉下划线开头的文件夹,即_resources


4. 工作流程

现在,我们可以愉快地写文章了。
打开Joplin,新建笔记(记得都放在同一个笔记本下),笔记的名字是文件名,写上Front-matter内容,之后就如同在word中一样写稿。
图片直接粘贴即可,需要的话修改 [ ] 里的内容,这是属于markdown语法的一部分,不详细说明。
写完的文章直接往blog\source\_posts里面一存,然后打开脚本按个2,等两分钟就部署到Github Pages上了。
愉快地工作吧!
cf0fb99a327ef788a844524d6eb74278.png

补充点内容,修改文章稍微有点麻烦,因为Joplin非常笨,它不会识别已有的文件,发现重名了直接加后缀,连带着里面的图片也都加后缀、重新复制到_resources里面了;对于我这种硬盘空间够、平时图片不多的人来说倒是无所谓,但部署了之后文章会重复显示好几篇。所以不能直接导出文章,需要手动删除旧的,然后再从Joplin中导出即可。


使用批处理和Joplin执行并优化Hexo博客工作流程
https://zjxdiu.github.io/blog/批处理优化Hexo工作流程/
作者
zjxdiu
发布于
2022年11月27日
许可协议