Hexo List命令
Hexo List命令实际调用的是plugins/console/list/index.js
文件,核心代码如下:
1 | var store = { |
load函数内部核心代码:
1 | //...省略 |
传入this参数是为了在loadDatabase内部调用hexo的db变量,也就是调用warehouse模块的load函数,db是在hexo构造函数中初始化的:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
//Database为warehouse模块中的database.js
this.database = new Database({
version: dbVersion,//初始化为1
path: pathFn.join(base, 'db.json')//传入文件名
});
//db.json
return fs.exists(path).then(function(exist){
if (!exist) return;
log.debug('Loading database.');
return db.load();//load函数之后再展开细讲
}).then(function(){
ctx._dbLoaded = true;
}, function(){
log.error('Database load failed. Deleting database.');
return fs.unlink(path);
});
Hexo warehouse模块
database.js构造函数
hexo在构造函数中实例化Database之后,就通过register_models.js
注册了database的model,相当于数据库的模型,这样就为之后调用model做准备:
1 | //传入options参数,如上面所说的version和path |
database.js model方法
1 |
|
其中../models
包含的模型如下:
1 | exports.Asset = require('./asset'); |
1 | Database.prototype.model = function(name, schema){ |
- 流程如下:
- hexo实例化初始化Database,然后注册各个model
- hexo list命令调用database的load方法加载