官网:https://hexo.io/zh-cn/api/generator
Hexo 的所有内容管理其实就两种类型 post 和 page,这两种类型的区别,post 是列表,page 是单页(如about)
1、概要
生成器根据处理后的原始文件建立路由。
1 2
   | hexo.extend.generator.register(name, function(locals){ });
 
  | 
 
locals 参数会被传递到此函数,其中包含 网站变量,请尽量利用此参数取得网站数据,避免直接访问数据库。
更新路由
1 2 3 4 5 6 7 8 9 10 11 12 13
   | hexo.extend.generator.register('test', function(locals){      return {     path: 'foo',     data: 'foo'   };         return [     {path: 'foo', data: 'foo'},     {path: 'bar', data: 'bar'}   ]; });
 
  | 
 
| 属性 | 
描述 | 
path | 
路径。不可包含开头的 /。 | 
data | 
数据 | 
layout | 
布局。指定用于渲染的模板,可为字符串或数组,如果省略此属性的话则会直接输出 data。 | 
在原始文件更新时,Hexo 会执行所有生成器并重建路由,请直接回传数据,不要直接操作路由。
如果重名,那么在最后面的插件就会把前面的同名函数取代掉,就是覆盖啦~
示例
归档页面
在 archives/index.html 建立一归档页面,设置 data 属性,把所有文章当作数据传入模板内,这个数据也就等同于模板中的 page 变量。
然后,设置 layout 属性好让 Hexo 使用主题模板来渲染,在此例中同时设定了两个布局,当 archive 布局不存在时,会继续尝试 index 布局。
1 2 3 4 5 6 7
   | hexo.extend.generator.register('archive', function(locals){   return {     path: 'archives/index.html',     data: locals.posts,     layout: ['archive', 'index']   } });
 
  | 
 
有分页的归档页面
您可以通过 hexo-pagination 这个方便的官方工具来轻松建立分页归档。
1 2 3 4 5 6 7 8 9
   | var pagination = require('hexo-pagination');
  hexo.extend.generator.register('archive', function(locals){   return pagination('archives/index.html', locals.posts, {     perPage: 10,     layout: ['archive', 'index'],     data: {}   }); });
 
  | 
 
生成所有文章
遍历 locals.posts 中的所有文章并生成所有文章的路由。
1 2 3 4 5 6 7 8 9
   | hexo.extend.generator.register('post', function(locals){   return locals.posts.map(function(post){     return {       path: post.path,       data: post,       layout: 'post'     };   }); });
 
  | 
 
复制文件
这次我们不明确返回数据,而是将 data 设置为一个函数,这样路由只会在需要时才会构建 fs.ReadStream。
1 2 3 4 5 6 7 8 9 10
   | var fs = require('hexo-fs');
  hexo.extend.generator.register('asset', function(locals){   return {     path: 'file.txt',     data: function(){       return fs.createReadStream('path/to/file.txt')     }   }; });
 
  | 
 
生成页面的path的规律
1 2 3 4 5 6 7 8 9 10 11 12
   | hexo.extend.generator.register('generator-name', function(locals){     return {       1) path: 'demo',  //根目录生成demo无格式文件       2) path: 'demo.html', //根目录生成demo.html       3) path: 'aaa/demo.html', //生成aaa文件夹下demo.html       4) path: 'aaa/bbb/demo.html', //生成aaa/bbb文件夹下demo.html       5) path: 'aaa/bbb/demo', //生成aaa/bbb文件夹下demo无格式文件       6) path: 'aaa/bbb/demo/', //生成aaa/bbb/demo文件夹下index.html文件       data: locals.posts,       layout: ['duan']     } });
 
  | 
 
注意:第六个规则最重要,只需要在后面加“/”,那么就会自动生成index.html
如果用 hexo-pagination,第一个参数 path 是可以不带”/“的,插件里面自己写了会自动加上,也就是说分页只需要写路径就会自动生成 index.html
一个分析 hexo 插件机制的 blog:https://www.iteye.com/blog/kyfxbl-2237538
一个新增插件的 blog:https://www.cnblogs.com/LuisYang/p/9356488.html