【Hexo插件系列】hexo cli 源码

提供hexo init、hexo help、hexo version命令

简介

源码

根入口 package.json

package.json 的核心配置

1
2
3
4
5
6
{
"name": "hexo-cli",
"main": "lib/hexo", # 入口文件,即 lib/hexo.js
"bin": {
"hexo": "./bin/hexo" # 该文件会拷贝到系统bin目录,即hexo命令。
},

hexo命令

hexo-cli/bin/hexo这个文件会被link到/usr/bin/hexo,实现全局hexo命令。实质是node的js可执行脚本。

1
require('../lib/hexo')();

hexo-cli/lib/hexo.js的核心代码,引入了三个子命令。

1
2
3
4
5
entry.console = {
init: require('./console/init'), // hexo init
help: require('./console/help'), // hexo help
version: require('./console/version') // hexo version
};

hexo init

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
module.exports = function(ctx) {
var console = ctx.extend.console;

// 注册 hexo help 命令
console.register('help', 'Get help on a command.', {}, require('./help'));

// 注册 hexo init 命令
console.register('init', 'Create a new Hexo folder.', {
desc: '...',
usage: '[...]',
arguments: [... ],
options: [... ]
}, require('./init'));

// 注册 hexo version 命令
console.register('version', 'Display version information.', {}, require('./version'));
};

hexo help、hexo version 三个子命令

hexo version 三个子命令

入口

1
2
3
4
5
6
7
8
9
10
'use strict';

var assign = require('object-assign');

hexo.config.category_generator = assign({
per_page: typeof hexo.config.per_page === 'undefined' ? 10 : hexo.config.per_page
}, hexo.config.category_generator);

// 注册category钩子
hexo.extend.generator.register('category', require('./lib/generator'));

其他

.travis.yml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
language: node_js
node_js:
- '0.10'
- '0.11'
- '0.12'
- iojs
script:
- npm test
after_script:
- cat ./coverage/lcov.info | ./node_modules/coveralls/bin/coveralls.js
deploy:
provider: npm
email: dev@adrianhaasler.com
api_key:
secure: OK0bKCkTZmTiexyO58dv0MqIn+WyYA/iJtnt0uhSICBT+69225UOhDJjai0kFRyBZ1ELQ0kEDaQAdyzNHavofjbp/wzXdKJMdiHJGjH0rshvsJqm4oGHJryH/LAIJ/XCFeLcte+RCfY466JJk2yqK6rh2SwiKG7RrmkL2BuCAzItW7Y7v1MaaFA2A9cX7ymPpB4qlFAgMtrVBtirUNgJEKJJA2wXTld1tceEi/TwziSVdALZA03ou7ljtW/wgmPi+1jS0+yh7Fak78TcfUc7M8Hb/Cfr1IKbXl2Z9xOAfQ1WoFcTCoXRPqo0Um9QOIaEBQlUl/oegW1rvuhPyWmU+GEUhVpZr4CcbKbsn4Nkl08OisNYUfIwoxExxaHIzvExTLKo+Mmh2x4M7ywsmS1xnWBmUSurQrCLEp3p2eXTvIVYmpsl0RZaZLU9UHBxVZ/OVfk85Leefg5k7vlbaCOM0s8Qpxq8PAUoZTN+o+uBxtcPQvNRst+Qz+xhcroSNWboc9G2hRyfKXsm7Y0K+Cg5LAvXE44n/iyHc4mZhKP0Rumxpjtk/9BhokqWAERSxe1OBjKGA5VanO5DeEHiEHcXP3+2TVtYLgvp4evYasD+VQhchZJnFhM89n9NMgpF6y88lQkLc2VPuxIroBDx1AaAZ1fnhLN8ao2qJjRe88JQ43Q=
on:
tags: true
repo: ahaasler/hexo-generator-multilingual-category
node: '0.12'

Hexo 3.0 把服务器独立成了个别模块,您必须先安装 hexo-server 才能使用。

1
$ npm install hexo-server -g

在服务器启动期间,Hexo 会监视文件变动并自动更新,您无须重启服务器。