nodejs 命令行小工具
07 Apr 2017开始
Step one
创建文件夹 cd 到文件夹 npm init 填写相应内容
Step two
在 package.json 中 添加 bin 项 的启动文件,如下:
"bin" : {
"[启动命令]" : "[启动入口文件]"
}
Step three
在当前文件的根目录执行 npm link 将 bin 下 的指令添加到全局,这样可以直接在本地调试你的代码,本质是做了两个软连接,最后指向了当前目录,这样就可以全局调用该命令
Step four
添加注释,编写代码
#!/usr/bin/env node
...code
commander
commander.js是TJ所写的一个工具包,其作用是让node命令行程序的制作更加简单。commander.js中命令行有两种常用api,一个叫做option,意为选项。一个叫做command,意为命令。
program
.version('0.0.1')
.option('-C, --chdir <path>', 'change the working directory')
.option('-c, --config <path>', 'set config path. defaults to ./deploy.conf')
.option('-T, --no-tests', 'ignore test hook')
program
.command('setup')
.description('run remote setup commands')
.action(function() {
console.log('setup');
});
program
.command('exec <cmd>')
.description('run the given remote command')
.action(function(cmd) {
console.log('exec "%s"', cmd);
});
program
.command('teardown <dir> [otherDirs...]')
.description('run teardown commands')
.action(function(dir, otherDirs) {
console.log('dir "%s"', dir);
if (otherDirs) {
otherDirs.forEach(function (oDir) {
console.log('dir "%s"', oDir);
});
}
});
program
.command('\*')
.description('deploy the given env')
.action(function(env) {
console.log('deploying "%s"', env);
});
program.parse(process.argv);
- 通过option设置的选项可以通过program.chdir或者program.noTests来访问。
- 通过command设置的命令通常在action回调中处理逻辑
version
用法: .version(‘x.y.z’) 用于设置命令程序的版本号
option
用法:.option('-n, --name <name>', 'your name', 'GK')
- 第一个参数是选项定义,分为短定义和长定义。用|,,, 连接。 参数可以用<>或者[]修饰,前者意为必须参数,后者意为可选参数。
- 第二个参数为选项描述
- 第三个参数为选项参数默认值,可选。
command
用法:.command('init <path>', 'description')
- command的用法稍微复杂,原则上他可以接受三个参数,第一个为命令定义,第二个命令描述,第三个为命令辅助修饰对象。
- 第一个参数中可以使用<>或者[]修饰命令参数
- 第二个参数可选。
- 当没有第二个参数时,commander.js将返回Command对象,若有第二个参数,将返回原型对象。
- 当带有第二个参数,并且没有显示调用action(fn)时,则将会使用子命令模式。
- 所谓子命令模式即,./pm,./pm-install,./pm-search等。这些子命令跟主命令在不同的文件中。
- 第三个参数一般不用,它可以设置是否显示的使用子命令模式。
description
用法:.description('command description')
用于设置命令的描述
action
用法:.action(fn)
用于设置命令执行的相关回调。fn可以接受命令的参数为函数形参,顺序与command()中定义的顺序一致。
parse
用法:.parse(process.argv)
此api一般是最后调用,用于解析 process.argv。
outputHelp
用法:.outputHelp()
一般用于未录入参数时自动打印帮助信息。