使用静态部署的方式使用Hexo,我们经常会遇到一个很烦人的问题,就是部署麻烦。
每次写一篇文章,就要经历Hexo clean、Hexo g、Hexo s、Hexo d四连,一开始还好,写多了之后烦不胜烦。
同时,由于我个人使用Joplin进行文章撰写,这个软件虽然简洁,但并不好用;图片虽然可以直接复制,但不能修改输出目录,图片资源默认保存在与/blog/
平行的/_resources/
文件夹中。
因此,结合我最为擅长的batch脚本语言,我就萌生了使用批处理来优化整个流程的想法。
1. Git安装配置(不确定是否有必要)
在安装Git的过程中,我们会有一个配置终端的过程,此处其实是建议选择第一项(使用MinTTY),但我当时选择了第二项即使用系统的cmd来作git bash的终端。
如果选择了第一项,可能也是能正常使用批处理来代替执行的,应该不用担心。
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
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 完整流程向导 echo 按0为确定,按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上了。
愉快地工作吧!
补充点内容,修改文章稍微有点麻烦,因为Joplin非常笨,它不会识别已有的文件,发现重名了直接加后缀,连带着里面的图片也都加后缀、重新复制到_resources
里面了;对于我这种硬盘空间够、平时图片不多的人来说倒是无所谓,但部署了之后文章会重复显示好几篇。所以不能直接导出文章,需要手动删除旧的,然后再从Joplin中导出即可。