编写Hexo插件

前言

Hexo已经用了大半年,真的很符合我写博客的种种需求。不过最近在使用Hexo中的skip_render标签时,遇到了一些问题。该标签下面的目录,还是会经过Hexo的处理,并不是我想像中的那样:直接把这些资源复制到public目录下面。
当我执行“hexo g”命令时,对于某些文件,Hexo中的nunjucks库会报错。于是就想着自己写一个复制资源的插件。(实际上对于这种比较简单的功能,通过写脚本来实现会更加方便)。看了下Hexo插件的实现机制,以及官方的文档之后,就简单的实验了下。下面就列举下过程。

编写Hexo插件

在官方手册里面可以看到Hexo是支持编写插件的,并且通过NPM来管理。而且官方的文档也写了不少关于编写插件的步骤,所以实现起来并不复杂。

添加插件目录

这是一张图片
在博客目录下的node_modules目录下,添加一个以hexo开头的目录,再在里面创建两个文件。

  1. index.js

    1
    2
    3
    4
    5
    var hexo = hexo != undefined ? hexo : {}
    console.log("test...1", __dirname)
    hexo.on("processAfter", function(){
    console.log("test...2", __dirname)
    })
  2. package.json

    1
    2
    3
    4
    5
    6
    {
    "name": "hexo-just-copy",
    "version": "0.0.1",
    "main": "index"
    }

编辑博客目录下的package.json文件

在字段dependencies中添加:

“hexo-just-copy” : “^0.0.1”

测试

小结

更多功能可以参考node_modules目录下其它插件的写法。
以及官方文档:
https://hexo.io/docs/plugins.html
https://hexo.io/api/events.html

最后附上一个执行复制的python脚本。。。毕竟还是写脚本方便。

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
import os
import shutil

currentPath = os.path.realpath(__file__)
currentPath = os.path.dirname(currentPath)
print (currentPath)
dstDir = currentPath + "\\public\\game"
srcDir = currentPath + "\\copyDate"
# print dstDir

cmd = os.popen("hexo clean")
cmdInfo = cmd.read()
print cmdInfo

cmd = os.popen("hexo g")
cmdInfo = cmd.read()
print cmdInfo

shutil.copytree(srcDir,dstDir)

cmd = os.popen("hexo d")
cmdInfo = cmd.read()
print cmdInfo

raw_input("Press ENTER to exit")

转载本站文章请注明作者(xtutu)和出处 xtutu