总结一些最近写Command Line Tool 的一些心得
yargs
npm install yargs --save
yargs
是优雅地接受命令行输入参数的模块,功能非常强大且已用,免去了很多重复的工作,一段代码足矣证明:
const argv = require('yargs').argv;
// argv 会自动接受所有输入参数 ,比如 demo_command -a hello
console.log(argv.a);
//hello
当然可以对 a
做更多的配置
const yargs = require('yargs');
let argv = yargs.
options('a', {
alias: 'api',
default: 'all',
}).argv;
//这样可以给 argv.a设置一个默认值,同时有一个别名,如:demo --api hello
更多的配置方式看github
colors
npm install colors --save
colors
是用来控制命令行输出文本颜色的, 还有更多功能如 背景色
、字体特效
等我用得比较少,需要学全的请看github。
//用起来也是特别简单,
const colors = require('colors');
//输出绿色的hello , 黄色的 world
console.log(colors.green('hello ') + colors.yellow('world'));
更多预设颜色:black、red、green、yellow、blue、magenta、cyan、white、gray、grey
主要是用于命令行输出提示信息,如红色的error message
readline-sync
npm install readline-sync --save
readline-sync
是同步获取用户输入的模块,主要用于带交互的基本输入。
常见的有询问用户是否同意 ,同意输入yes
, 或者需要用户填写什么信息之类。
const readline = require('readline-sync');
let name = readline.question('What is your name? ', {defaultInput: 'Tom'});
console.log('Oh! I got it! You are '+name);
输出:
$ node test.js
What is your name? Gay
Oh! I got it! You are Gay
readline-sync
的功能远远不止这样,还有很多交互方式,详情看github
关于目录的一些问题
HOME
HOME
目录在Command Line 中也比较常用,可以让你生成一些本地文件,或者配置文件。
Linux
和 OSX
中,可以通过环境变量来获取。
process.env['HOME'];
// 当前用户的目录
而windows
的话,我就没研究了。
命令所在的源码目录
__dirname
当前执行的脚本的目录,不管你在哪个目录下调用,这个返回的都是源码所在目录
这个指的是你当前命令的执行文件源码的目录(或理解为 安装目录
)。
它的作用是,你可能需要从你开发的命令的源码里加载一些文件,或者模板。
比如 一些框架的脚手架 ,需要生产代码 ,自然就是从脚手架的目录里copy一份模板。
当前目录
process.cwd()
这个是指你输入命令的当前目录。
要活用以上两个目录,在写 Command Line Tool 的时候会经常用到。
注意 EOL 的坑
require('os').EOL
这是一个很方便的功能,它会抹平操作系统的查差异性,返回一个换行符。 在你打印信息的时候十分常用。
不过注意有一个坑
如果你需要生产一些文本文件,那你需要特别注意里面用的换行符。
比如我在linux
下生成的配置文件,弄到 windows
下就解释不出来了。
yargs比commander要好,哈哈