CMD命令参数使用
在使用npm制作CMD命令中已经介绍了基本的命令制作
现在我们可以学习一下, 怎么使用参数, 例如我们使用vue
命令的时候, 可以使用vue init
, 也可以使用vue ui
等去做不同的事情, 后面的init
和ui
就属于这个命令的参数的
创建包
首先还是新建一个包, 又关创建以及包的文件和格式, 请参考使用npm制作CMD命令
目录
- package.json
- index.js
package.json
{
"name": "command-test",
"version": "1.0.0",
...
"bin": {
"mycommand": "./index.js"
}
}
编写执行文件index.js
其实执行文件的是运行与NodeJs环境下的, 在NodeJs中有个全局变量
process
是NodeJs中一个关于进程的对象, 这里不细说, 有兴趣的请参考NodeJs文档
从process
对象的argv
属性中可以获取执行命令时的参数
index.js
#!/usr/bin/env node
console.log('argv: ', process.argv);
执行一个带参数的命令, 例如
mycommand install
, 你可以看到打印了一个数组
这个数组包含三个字符串, 前两个分别为node执行程序(node.exe)的路径和执行文件(index.js)的路径
第三个为install
, 也就是我们命令的参数
当然也可以携带多个参数,process.argv
数组除第一和第二个外, 其余项都是我们执行命令是所使用的的参数
使用参数
既然可以拿到参数, 那么久可以根据参数去做一些判断, 从而实现不同的功能
下面我们写个install
和uninstall
参数的命令
index.js示例代码
#!/usr/bin/env node
const argv = process.argv.slice(2);
if (argv && argv.length > 0) {
if (argv.indexOf('install') >= 0) {
console.log('run install');
}
if (argv.indexOf('uninstall') >= 0) {
console.log('run uninstall');
}
}
然后我们再运行
mycommand install
或mycommand uninstall
, 可以看到分别打印了run install
和run uninstall
或者运行mycommand install unstall
, 那么run install
和run uninstall
都会打印
现在基本上可以使用这些东西去写一个CMD命令了
commander.js使用
commander.js就是用来处理命令参数的一个工具
示例代码
#!/usr/bin/env node
const program = require('commander');
program
.option('install', 'install参数')
.option('uninstall', 'uninstall参数')
.parse(process.argv);
if(program.install) {
console.log('run install');
}
if(program.uninstall) {
console.log('run uninstall');
}
这段代码的效果与上面的代码效果是一样的, 使用了
commander.js
让你的代码看起来更加的优雅, 而且使用起来也很方便
commander.js 的 parse
parse
方法接收一个用于解析的对象, 我们传入process.argv
进行解析
commander.js 的 options方法
该方法接收两个参数, 第一个是命令的参数, 第二个是该参数的说明
例如上面的代码, 当我们使用了program.option('install', 'install参数')
之后, 如果命令执行是有install
参数, 那么commander就会在program
对象中添加一个install
属性(属性名与你的命令参数名一致), 值为true
命令的简写
options
方法的第一个参数不仅接收一个参数的名称, 还可以定义一个参数的简写
简写与参数名称写在同一个字符串, 用逗号隔开, 简写在前, 名称在后
参数的简写
#!/usr/bin/env node
const program = require('commander');
program
.option('i, install', 'install参数')
.option('-u, uninstall', 'uninstall参数')
.parse(process.argv);
if(program.install) {
console.log('run install');
}
if(program.uninstall) {
console.log('run uninstall');
}
这段代码与上面的代码有着同样的功能, 都可以处理
mycommand install
和mycomamnd uninstall
命令
但是这段代码还可以使用mycommand i
代替mycommand install
, 使用mycommand -u
代替mycomamnd uninstall
, 也就是简化了一下命令
关于commander
可以自己阅读npm上的commander
文档
好了, 到这里基本上就是学会了基础技能了, 发挥自己的创造力去做点牛逼的东西吧