hexo脚本编写指南(三)

过滤器(Filter)

官方地址

过滤器分注册和执行两个函数
注册过滤器的function参数可以是多个,如果是hexo钩子 那么data的值与page一致
执行过滤器的第二个参数为带入值data,第三个值是args
以下是官网的一个小demo 讲的还是比较清晰的

hexo.extend.filter.register('test', function(data, arg1, arg2){
 // data === 'some data'
 // arg1 === 'foo'
 // arg2 === 'bar'
 
 return 'something';
});
hexo.extend.filter.register('test', function(data, arg1, arg2){
 // data === 'something'
});
hexo.extend.filter.exec('test', 'some data', {
 args: ['foo', 'bar']
});

小例子1

如果data.content里面有#fn,那么插入一个js

hexo.extend.filter.register('after_post_render',function(data){

    if(data.content.indexOf("#fn") != -1){
        data.content += "";
    }

    return data;
});

小例子2

选择性生成css或js
比如,我在主题的source/js文件夹下放了duoshuo.min.js这个多说本地化脚本,当设置里没启用多说的时候这个js文件还是会跟着生成,跟着发布到你的博客服务器上,浪费流量。该怎么办呢?

把如下js放进主题的scripts文件夹下(文件名随意):

'use strict';

hexo.extend.filter.register('after_generate',function(){
    var duoshuo = hexo.theme.config.duoshuo_shortname;

    if(!duoshuo || duoshuo.length == 0){
        hexo.route.remove('js/duoshuo.min.js');
    }
});

其中duoshuo_shortname是主题设置里的一个条目。

这样,当duoshuo_shortname为空时,duoshuo.min.js不会跟着生成,从而减少所需加载量。

你可能感兴趣的:(hexo脚本编写指南(三))