hexo点滴

如果删除hexo-generator-index插件

如果没有hexo-generator-index插件(hexo自带),那么你就必须自己在source中创建一个index,这样编译后hexo才会生成index文件,读取localhost:4000时,才能读取到index,不然就没有localhost:4000这个路径了


hexo文章类型略说

  • hexo的所有内容管理其实说白了就两种类型 post和page,这两种类型的区别,逻辑上的就是post是可以列表的,page是单页,如about这样的,具体表现就是生成的post都是在_post文件夹中,page都是在外层根目录下自建文件夹的

  • 可以将config中archive_dir:news,permalink: news/:year/:month/:day/:title/ 这样就会把所有post编译到archive中,节省一个文件夹

  • 无论是index tag category archive,都不过是文章集合的再编辑形式而已,他们的形式基本为:

--- index
--- page(这里面是index的分页页面文件夹)

--- tag
------ tagName
--------- page(这里面是tag的分页页面文件夹)
------------ 02(从第二页开始)
--------------- index.html(分页页面)
--------- index.html(分页页面)
------ index.html(汇总页面)


image.png

--- categories
------ categorieName
--------- page(这里面是tag的分页页面文件夹)
------------ 02(从第二页开始)
--------------- index.html(分页页面)
--------- index.html(tag汇总页面)


image.png

--- archive
------ 2019(这里面是年份页面文件夹)
--------- 01
------ index.html(汇总页面)

生成结构基本就是这个样子的


生成器中name的用途

hexo.extend.generator.register(name, function(locals){
});
这个里面的 name 是做什么的呢?
其实这是注册了后面运行函数的代号
按照package.json里面加载插件的顺序
会依次运行代号里面的函数
如果重名
那么在最后面的插件就会把前面的同名函数取代掉
就是覆盖啦~
如:
hexo-generator-tag/index.js

hexo.extend.generator.register('tag', require('./lib/generator'));

注册了名为tag的生成器
我们自己定义一个插件
hexo-generator-tag-myself/index.js

hexo.extend.generator.register('tag', require('./lib/generator-tag'));

名字一样
那么就看在package.json中 哪一个后加载
哪个在后面 就用哪个生成器

通过上面的逻辑 再结合hexo源代码

hexo/lib/plugins/generator/index.js

'use strict';

module.exports = ctx => {
  const { generator } = ctx.extend;

  generator.register('asset', require('./asset'));
  generator.register('page', require('./page'));
  generator.register('post', require('./post'));
};

其实 asset page post 全部都是利用generator生成的,所以
我们可以通过重写asset page post的编译内容 更改其路径和内容
如:

hexo.extend.generator.register('post', function(locals){
    return locals.posts.map(function(post){
      return {
        path: "book/"+post.path,
        data: post,
        layout: 'post'
      };
    });
  });

这样就重写了post生成器


生成页面的path的规律

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


插件的写法

node_modules 文件夹中建立文件夹,文件夹名称开头必须为 hexo-

.
├── index.js
└── package.json

package.json 中至少要包含 name, version, main 属性,例如:

package.json
{
  "name": "hexo-my-plugin",
  "version": "0.0.1",
  "main": "index"
}

注意:最重要的一步,需要将此插件添加都package.json的dependencies中即可

  "dependencies": {
    "hexo": "^3.7.0",
    "hexo-generator-archive": "^0.1.5",
    "hexo-generator-category": "^0.1.3",
    "hexo-generator-tag": "^0.2.0",
    "hexo-generator-basic-set": "^0.1.1",
    "hexo-renderer-ejs": "^0.3.1",
    "hexo-renderer-marked": "^0.3.2",
    "hexo-renderer-stylus": "^0.3.3",
    "hexo-server": "^0.3.1",
    "hexo-my-plugin": "0.0.1"  // 这是我们自己的插件
  }

var localizedPath = ['docs', 'api'];
~localizedPath.indexOf(title)
查找数组中的 "Apple" 元素:

var fruits = ["Banana", "Orange", "Apple", "Mango"];
var a = fruits.indexOf("Apple");
a 结果输出:

2
以上输出结果意味着 "Apple" 元素位于数组中的第 3 个位置。

取反的用法是,是因为-1的取反操作等于0,而其他数的取反操作不等于0。所以用indexOf操作符可以用操作来判断某个字符串里是否有某个字符。

var str = '123456'
if(~str.indexOf(0)){
  console.log('因为取反之后不为零,说明indexOf的结果不等于-1,所以表示str字符串里包含了对应字符')
} else {
  console.log('说明取反之后为零,说明indexOf的结果等于-1,所以表示str字符串里不包含了对应字符')
}

凡是在_post文件夹下的文件,都是用的post模板
凡是不在_post文件夹下的,全部都用page,除非指定了布局文件


多语言文件是和url的多语言一一对应的 page.lang也会随之变化

/index.html => en
/archives/index.html => en
/zh-tw/index.html => zh-tw

如果想缺省状态下是en
需要先声明

language: en

如果一个国际化页面的url为localhost:4000/zh/ ,那么只有监测到在语言文件夹下有zh.yml文件时,page.lang才会变为“zh”


<%- partial('_partial/header', null, {cache: !config.relative_link}) %>

这是个大坑
缓存如果是true,那么helper函数就只运行一次 这样的话 我们生成的页面就用的第一次生成的页面 很糟糕

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,454评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,553评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,921评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,648评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,770评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,950评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,090评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,817评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,275评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,592评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,724评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,409评论 4 333
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,052评论 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,815评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,043评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,503评论 2 361
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,627评论 2 350

推荐阅读更多精彩内容