如果刪除hexo-generator-index插件
如果沒(méi)有hexo-generator-index插件(hexo自帶)显熏,那么你就必須自己在source中創(chuàng)建一個(gè)index,這樣編譯后hexo才會(huì)生成index文件恕稠,讀取localhost:4000時(shí),才能讀取到index樊诺,不然就沒(méi)有l(wèi)ocalhost:4000這個(gè)路徑了
hexo文章類(lèi)型略說(shuō)
- hexo的所有內(nèi)容管理其實(shí)說(shuō)白了就兩種類(lèi)型 post和page仗考,這兩種類(lèi)型的區(qū)別,邏輯上的就是post是可以列表的啄骇,page是單頁(yè)痴鳄,如about這樣的,具體表現(xiàn)就是生成的post都是在_post文件夾中缸夹,page都是在外層根目錄下自建文件夾的
- 可以將config中archive_dir:news痪寻,permalink: news/:year/:month/:day/:title/ 這樣就會(huì)把所有post編譯到archive中,節(jié)省一個(gè)文件夾
- 無(wú)論是index tag category archive虽惭,都不過(guò)是文章集合的再編輯形式而已橡类,他們的形式基本為:
--- index
--- page(這里面是index的分頁(yè)頁(yè)面文件夾)
--- tag
------ tagName
--------- page(這里面是tag的分頁(yè)頁(yè)面文件夾)
------------ 02(從第二頁(yè)開(kāi)始)
--------------- index.html(分頁(yè)頁(yè)面)
--------- index.html(分頁(yè)頁(yè)面)
------ index.html(匯總頁(yè)面)
image.png
--- categories
------ categorieName
--------- page(這里面是tag的分頁(yè)頁(yè)面文件夾)
------------ 02(從第二頁(yè)開(kāi)始)
--------------- index.html(分頁(yè)頁(yè)面)
--------- index.html(tag匯總頁(yè)面)
image.png
--- archive
------ 2019(這里面是年份頁(yè)面文件夾)
--------- 01
------ index.html(匯總頁(yè)面)
生成結(jié)構(gòu)基本就是這個(gè)樣子的
生成器中name的用途
hexo.extend.generator.register(name, function(locals){
});
這個(gè)里面的 name 是做什么的呢?
其實(shí)這是注冊(cè)了后面運(yùn)行函數(shù)的代號(hào)
按照package.json里面加載插件的順序
會(huì)依次運(yùn)行代號(hào)里面的函數(shù)
如果重名
那么在最后面的插件就會(huì)把前面的同名函數(shù)取代掉
就是覆蓋啦~
如:
hexo-generator-tag/index.js
hexo.extend.generator.register('tag', require('./lib/generator'));
注冊(cè)了名為tag的生成器
我們自己定義一個(gè)插件
hexo-generator-tag-myself/index.js
hexo.extend.generator.register('tag', require('./lib/generator-tag'));
名字一樣
那么就看在package.json中 哪一個(gè)后加載
哪個(gè)在后面 就用哪個(gè)生成器
通過(guò)上面的邏輯 再結(jié)合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'));
};
其實(shí) asset page post 全部都是利用generator生成的芽唇,所以
我們可以通過(guò)重寫(xiě)asset page post的編譯內(nèi)容 更改其路徑和內(nèi)容
如:
hexo.extend.generator.register('post', function(locals){
return locals.posts.map(function(post){
return {
path: "book/"+post.path,
data: post,
layout: 'post'
};
});
});
這樣就重寫(xiě)了post生成器
生成頁(yè)面的path的規(guī)律
hexo.extend.generator.register('generator-name', function(locals){
return {
1) path: 'demo', //根目錄生成demo無(wú)格式文件
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無(wú)格式文件
6) path: 'aaa/bbb/demo/', //生成aaa/bbb/demo文件夾下index.html文件
data: locals.posts,
layout: ['duan']
}
});
注意:第六個(gè)規(guī)則最重要顾画,只需要在后面加“/”,那么就會(huì)自動(dòng)生成index.html
如果用hexo-pagination匆笤,第一個(gè)參數(shù)path是可以不帶"/"的研侣,插件里面自己寫(xiě)了會(huì)自動(dòng)加上
也就是說(shuō)分頁(yè)只需要寫(xiě)路徑就會(huì)自動(dòng)生成index.html
插件的寫(xiě)法
node_modules 文件夾中建立文件夾,文件夾名稱(chēng)開(kāi)頭必須為 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)
查找數(shù)組中的 "Apple" 元素:
var fruits = ["Banana", "Orange", "Apple", "Mango"];
var a = fruits.indexOf("Apple");
a 結(jié)果輸出:
2
以上輸出結(jié)果意味著 "Apple" 元素位于數(shù)組中的第 3 個(gè)位置。
取反的用法是咆课,是因?yàn)?1的取反操作等于0末誓,而其他數(shù)的取反操作不等于0。所以用indexOf操作符可以用操作來(lái)判斷某個(gè)字符串里是否有某個(gè)字符书蚪。
var str = '123456'
if(~str.indexOf(0)){
console.log('因?yàn)槿》粗蟛粸榱憷瑁f(shuō)明indexOf的結(jié)果不等于-1,所以表示str字符串里包含了對(duì)應(yīng)字符')
} else {
console.log('說(shuō)明取反之后為零殊校,說(shuō)明indexOf的結(jié)果等于-1晴玖,所以表示str字符串里不包含了對(duì)應(yīng)字符')
}
凡是在_post文件夾下的文件,都是用的post模板
凡是不在_post文件夾下的为流,全部都用page窜醉,除非指定了布局文件
多語(yǔ)言文件是和url的多語(yǔ)言一一對(duì)應(yīng)的 page.lang也會(huì)隨之變化
/index.html => en
/archives/index.html => en
/zh-tw/index.html => zh-tw
如果想缺省狀態(tài)下是en
需要先聲明
language: en
如果一個(gè)國(guó)際化頁(yè)面的url為localhost:4000/zh/ ,那么只有監(jiān)測(cè)到在語(yǔ)言文件夾下有zh.yml文件時(shí)艺谆,page.lang才會(huì)變?yōu)椤皕h”
<%- partial('_partial/header', null, {cache: !config.relative_link}) %>
這是個(gè)大坑
緩存如果是true,那么helper函數(shù)就只運(yùn)行一次 這樣的話 我們生成的頁(yè)面就用的第一次生成的頁(yè)面 很糟糕