hexo管理工具的开发

磨蹭了大半年,上个月终于挤了点时间把我想要的hexo管理工具做了出来。正好是趁着公司年中会,3天都没什么事。找了个僻静的角落猫着身子“偷偷”码代码。整个过程倒也顺畅,借鉴公司项目的经验,依样画葫芦,一点一点的“堆”,慢慢的就出来了。

开发过程中倒也没什么难点。唯一棘手的是:跨平台的处理。有一些东西win与*inx类系统还是不太一样。都跟child_process有关。

一个是spawn在windows下运行.cmd.bat文件时,需要带上文件后缀才行。于是就有了类似下面这样的代码:

1
2
3
4
5
6
7
var isWin = /^win/.test(process.platform),
hexo_cli = isWin ? 'hexo.cmd' : 'hexo',
hexo_server = CHILD_PROCESS.spawn(
hexo_cli,
['server'],
{cwd: HEXO_PATH.rootPath}
);

因为hexo在windows下,最终是个.cmd文件,直接spawn('hexo')会报错说:没有hexo这个命令。

还一个是child_process.kill()。这个在windows下也是行不通。于是就有了下面这样的代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
if (isWin) {
TREE_KILL(hexo_pid, 'SIGTERM', function (err) {
if (err) {
LOGGER.error('kill hexo failed. hexo pid:' + hexo_pid + ';error=' + JSON.stringify(err));
return;
}
LOGGER.info('hexo stopped');
hexo_pid = NaN;
});
}
else {
hexo_server.kill();
hexo_pid = NaN;
LOGGER.info('hexo stopped');
}

tree-kill是一个处理windows下kill某个进程的模块。第一个参数是该进程的pid,第二个是kill signal(其实这个具体有些什么意思我也不太明白😂),第三个就是callback了。

很明显这两个功能分别是启动和关闭hexo的。这个为我的工具带来了极大的便利。

项目完工后还是挺有成就感的,虽然还有不少缺陷。文件读取部分都是用的最基础的read, write。还没有涉及“流”的概念(这块还没怎么接触),想必在文件很多的时候,效率是非常低下的😥。

接下来的开发方向略有些纠结。因为整个项目基本上是独立于hexo的,没有复用hexo现有的功能。接下来是继续按这个方向走:自己做文件读取、写入,文件分析;还是说复用hexo的一些功能(主要也就是文件读写),将整个项目并到hexo中,做成hexo的一个插件,类似:hexo-adminhexo-hey。前者呢,肯定对自己的能力提升帮助更大,因为功能都要自己写,需要不断做性能优化;后者的话,能够节省很多功夫,能够快速把工具完善。纠结,哈哈。除了这些,就是一些功能的加强了:比如编辑器的增强、添加一个markdown的cheat sheet等。

这次开发过程挺有意思的。终于体会到 编程就是解决问题的过程 这种感觉了。在v站上做了个小小的推广后,目前获得了25 stars,1 fork。历史最高😂。也给自己增加了不少的信心。以后有时间慢慢开发、维护。希望便利自己的同时也能够给更多人带来方便。