youngwind / blog

梁少峰的个人博客
4.66k stars 385 forks source link

shell.js与yargs命令行开发 #48

Open youngwind opened 8 years ago

youngwind commented 8 years ago

与终端的交互

一种编程语言是否易用,很大程度上,取决于开发命令行程序的能力。 忽然想搞明白平常用的那些npm包,它们是如何接受参数然后运行的。

1. shell.js

关于nodejs如何调用shell进程,可以参考 #46 #47 ,里面介绍了两种方法。下面主要说一下shell.js一些比较方便但是不常用的方法。

  1. 检查某个文件夹是否存在
shell.test('-d','path');  // 当path为目录,返回true
shell.test('-e','path');  // 当path为目录或者文件,返回true
  1. 重写文件内容
"string".to('file');
  1. 添加文件内容到尾部
"string".toEnd('file');
  1. 从文件中读取字符串然后进行正则匹配替换
shell.sed(/a/g,'b','test.js');  // 把test.js里面的所有字母b替换成字母a然后返回
shell.sed('-i',/a/g,'b','test.js');  //替换之后重新写入覆盖源文件

2. yargs

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' ]

一点都不友好。