shell.js与yargs命令行开发
youngwind opened this issue · comments
与终端的交互
一种编程语言是否易用,很大程度上,取决于开发命令行程序的能力。
忽然想搞明白平常用的那些npm包,它们是如何接受参数然后运行的。
#1. shell.js
关于nodejs如何调用shell进程,可以参考 #46 #47 ,里面介绍了两种方法。下面主要说一下shell.js一些比较方便但是不常用的方法。
- 检查某个文件夹是否存在
shell.test('-d','path'); // 当path为目录,返回true
shell.test('-e','path'); // 当path为目录或者文件,返回true
- 重写文件内容
"string".to('file');
- 添加文件内容到尾部
"string".toEnd('file');
- 从文件中读取字符串然后进行正则匹配替换
shell.sed(/a/g,'b','test.js'); // 把test.js里面的所有字母b替换成字母a然后返回
shell.sed('-i',/a/g,'b','test.js'); //替换之后重新写入覆盖源文件
yargs可以将命令行的参数转化成对象,比如我有一个test.js文件
var argv = require('yargs').argv;
console.log(argv)
当我执行
node test.js --name lsf --emai 123@qq.com
终端输出
{ _: [], name: 'a', email: 'b', '$0': 'test.js' }
所有argv就可以很方便地提取到argv.name和argv.email.
如果是用process.argv去获取的话,是这样的
[ '/usr/local/bin/node',
'/Users/youngwind/www/lazy-smart/test.js',
'--name',
'a',
'--email',
'b' ]
一点都不友好。