创建自己的 hexo 插件

Hexo 中有两种形式的插件:脚本(Scripts)、插件(Packages)。脚本及插件具体编写、发布流程请查看官方文档Hexo 插件。本文仅总结 hexo 插件编写。

扩展类型

控制台(Console)

控制台是 Hexo 与开发者之间沟通的桥梁。

1
2
3
hexo.extend.console.register(name, desc, options, function(args){
// ...
});

部署器(Deployer)

部署器帮助开发者将网站快速部署到远程服务器上,避免了复杂的指令。

1
2
3
hexo.extend.deployer.register(name, function(args){
// ...
});

过滤器(Filter)

过滤器用于修改特定文件,Hexo 将这些文件依序传给过滤器,而过滤器可以针对文件进行修改,这个概念借鉴自 WordPress。

1
2
hexo.extend.filter.register(type, function(){
}, priority);

过滤器列表

  • before_post_render
    在文章开始渲染前执行。您可以参考 文章渲染 以了解执行顺序。

    1
    2
    3
    4
    5
    // 举例来说,把标题转为小写:
    hexo.extend.filter.register('before_post_render', function(data){
    data.title = data.title.toLowerCase();
    return data;
    });
  • after_post_render
    在文章渲染完成后执行。您可以参考 文章渲染 以了解执行顺序。

    1
    2
    3
    4
    5
    // 举例来说,把 @username 取代为 Twitter 的开发者链接。
    hexo.extend.filter.register('after_post_render', function(data){
    data.content = data.content.replace(/@(\d+)/, '<a href="http://twitter.com/$1">#$1</a>');
    return data;
    });
  • before_exit
    在 Hexo 即将结束时执行,也就是在 hexo.exit 被调用后执行。

    1
    2
    3
    hexo.extend.filter.register('before_exit', function(){
    // ...
    });
  • before_generate
    在生成器解析前执行。

    1
    2
    3
    hexo.extend.filter.register('before_generate', function(){
    // ...
    });
  • after_generate
    在生成器解析后执行。

    1
    2
    3
    hexo.extend.filter.register('after_generate', function(){
    // ...
    });
  • template_locals
    修改模板的 局部变量。

    1
    2
    3
    4
    5
    // 举例来说,在模板的局部变量中新增当前时间:
    hexo.extend.filter.register('template_locals', function(locals){
    locals.now = Date.now();
    return locals;
    });
  • after_init
    在 Hexo 初始化完成后执行,也就是在 hexo.init 执行完成后执行。

    1
    2
    3
    hexo.extend.filter.register('after_init', function(){
    // ...
    });
  • new_post_path
    用来决定新建文章的路径,在建立文章时执行。

    1
    2
    3
    hexo.extend.filter.register('new_post_path', function(data, replace){
    // ...
    });
  • post_permalink
    用来决定文章的永久链接。

    1
    2
    3
    hexo.extend.filter.register('post_permalink', function(data){
    // ...
    });
  • after_render
    在渲染后执行,您可以参考 渲染 以了解更多信息。

  • server_middleware
    新增服务器的 Middleware。app 是一个 Connect 实例。

    1
    2
    3
    4
    5
    6
    7
    // 举例来说,在响应头中新增 X-Powered-By: Hexo。
    hexo.extend.filter.register('server_middleware', function(app){
    app.use(function(req, res, next){
    res.setHeader('X-Powered-By', 'Hexo');
    next();
    });
    });

生成器(Generator)

生成器根据处理后的原始文件建立路由。

1
2
hexo.extend.generator.register(name, function(locals){
});

辅助函数(Helper)

辅助函数帮助您在模板中快速插入内容,建议您把复杂的代码放在辅助函数而非模板中。

1
2
hexo.extend.helper.register(name, function(){
});

迁移器(Migrator)

迁移器帮助开发者从其他系统迁移到 Hexo。

1
2
3
hexo.extend.migrator.register(name, function(args){
// ...
});

处理器(Processor)

处理器用于处理 source 文件夹内的原始文件。完整说明请参考 Box

1
2
hexo.extend.processor.register(rule, function(file){
});

渲染引擎(Renderer)

渲染引擎用于渲染内容。

1
2
hexo.extend.renderer.register(name, output, function(data, options){
}, sync);

标签插件(Tag)

标签插件帮助开发者在文章中快速插入内容。

1
2
hexo.extend.tag.register(name, function(args, content){
}, options);

参考资料

  1. Hexo 插件
  2. Hexo API