hexo 命令注册
hexo构造函数中实例化extend.console,在hexo cli中先注册hexo help version命令
核心的注册逻辑:1
2
3
4
5var c = this.store[name.toLowerCase()] = fn;
c.options = options;
c.desc = desc;
this.alias = abbrev(Object.keys(this.store));
abbrev模块
abbrev是Isaac Z. Schlueter 创建的一个handy for command-line scripts, or other cases where you want to be able to accept shorthands.
(专门为了处理命令行脚本,或者接受速记)
Isaac Z. Schlueter :npm inventor and CEO. Early contributor and former BDFL of Node.js. Author of many JavaScripts. Been making internets for a pretty long time.
(npm的创造者和CEO)
BDFL:Benevolent Dictator For Life (BDFL) is a title given to a small number of open-source software development leaders, typically project founders who retain the final say in disputes or arguments within the community.
是给少数开源软件开发领导者的标题,类似在社区里有说话权的项目创始人
比如以下几位都是nodejs的贡献者:
Ryan Dahl(跟PAAS Heroku 有关)
Isaac Schlueter (在Oakland CA 奥克兰(美国加利福尼亚州西部港市))
Bert Belder (为node提供windows支持的主要开发者)
TJ Holowaychuk (大名鼎鼎的TJ,express,jade的作者)
Tim Caswell (connect的作者)
Felix Geisendörfer ( works on projects node-formidable, node-mysql 在Berlin, Germany (德国柏林))
Mikeal Rogers (request的作者,在旧金山 San Francisco)
Alexis Sellier ( less.js, vows 在柏林)
Jeremy Ashkenas ( CoffeeScript, underscore, backbone, docco 的作者 在纽约 NYC)
Jed Schmidt ( fab.js )
Marak Squires (mostly known for pumping out dozens of node.js libraries per month)
Peteris Krumins ( browserling 在拉脱维亚)
James Halliday ( dnode, optimist and browserify的作者)
abbrev是在注册命令时为了存储别名时用的一个模块,比如输入hexo n
的时候hexo会识别出是调用了new
命令。就像它在readme.md中所说的Just like ruby’s Abbrev.就像ruby中的Abbrev模块。
Usage:
1 | var store = { |
hexo 命令获取
通过存储在Console实例中的alias字典对象中获取实际的命令Key(alias字典对象就是通过调用abbrev生成的),然后去实际的store对象中获取命令。
核心的获取逻辑:
1 | Console.prototype.get = function(name){ |
abbrev源码分析
1 | function abbrev (list) { |
可以尝试写个C#的版本。。