学习vue-cli源码的那个作者建议啃码之前学一下这些常用的npm包,于是我开始了啃包之路。
去看了github
才知道这个包的作者好牛逼啊,网上说学node
基本离不开他哈哈哈。
在我们使用vue-cli
,我们在控制台
- 输入
vue --version
或者vue -v
时就会出现当前的版本号; - 输入
vue --help
或者vue -h
就会出现可以使用的命令; - 根据
vue -help
我们得知可以运行vue create
、vue ui
等。
以上这些操作都是源自于在vue-cli
在实现的过程中,使用了commander
这个包。
commander
可以让node
命令更加简单,提供了用户命令行输入和参数解析等强大功能。
安装
yarn add commander --dev
使用
在文件夹新建index.js
:
const { program } = require('commander');
program.version('0.0.1');
program.parse(process.argv);
在命令行中执行node index.js -v
即会答应出当前的版本号为0.0.1
。
常用功能解析
- 用户输入命令行的时候需要借助
-
或者--
来实现:
node index.js -v # -代表简写
node index.js -v -a -b
node index,js -vab ## 可以合并多个简写命令
node index.js --version ## --代表全称
node index.js --version hello ## 命令携带了参数hello
- 添加命令行可以使用
.option
:
const { program } = require('commander');
program
.version('0.0.1')
.option('-d, --debug', 'output extra debugging');
program.parse(process.argv);
输入node index -d
或者node --debug
都属于同一条命令。-
代表命令简写,--
代表命令全称。
- 获得当前用户输入的命令
.opts()
:
const { program } = require('commander');
program
.version('0.0.1')
.option('-d, --debug', 'output extra debugging');
program.parse(process.argv);
const options = program.opts();
if (options.debug) console.log(options); // { debug: true }
- 设置带有参数的命令:
const { program } = require('commander');
program
.version('0.0.1')
.option('-d, --debug', 'output extra debugging')
.option('-p, --pizza-type <type>', 'flavour of pizza');
program.parse(process.argv);
const options = program.opts();
if (options.debug) console.log(options);
console.log('pizza details:');
if (options.pizzaType) console.log(`- ${options.pizzaType}`);
如果输入node index.js -p
会报错,因为需要在后面加入参数,例如:node index.js -p vegetarian
。
- 默认值
const { program } = require('commander');
program.option('-p, --pizza-type <type>', 'flavour of pizza', 'blue');
program.parse(process.argv);
const options = program.opts();
console.log(`cheese: ${options.cheese}`); // blue
- 取反选项: 使用
--no
开头的命令,如果用户输入的时候没有它,默认是true
;否则是false
。
const { program } = require('commander');
program.option('--no-book', 'remove book');
program.parse(process.argv);
const options = program.opts();
// 执行node index.js ,输出 book: true
// 执行node index.js --no-book,输出 book: false
console.log(`book: ${options.book}`);
- 可选参数
const { program } = require('commander');
// 参数必填
// program.option('-p, --pizza-type <type>', 'flavour of pizza', 'blue');
// 可选参数
program.option('-p, --pizza-type [type]', 'flavour of pizza', 'blue');
program.parse(process.argv);
const options = program.opts();
console.log(`cheese: ${options.cheese}`); // blue
- 长度可变的参数
const { program } = require('commander');
// 参数必填
// program.option('-p, --pizza-type <type...>', 'flavour of pizza', 'blue');
// 可选参数
program.option('-p, --pizza-type [type...]', 'flavour of pizza', 'blue');
program.parse(process.argv);
const options = program.opts();
console.log(`cheese: ${options.cheese}`);
-
查看当前可以用的命令
当我们添加了多个
option
之后,就可以直接输入node index.js --help
,直接会输出多个.option
定义的命令了。
Usage: index [options]
Options:
-d, --debug output extra debugging
--no-book remove book
-h, --help display help for command
更多配置项参考文档: commander
啊,单纯看英语文档真的要命啊,但是中文文档看着也好变扭啊。