node.js编写命令行
1. 创建命令文件
hello.js
#!/usr/bin/env node
console.log(`hello world`);
2. 修改package.json
增加配置
{
......
"bin": {
"hello": "scripts/hello.js"
},
......
}
本地测试需要执行命令:
npm link
测试:
hello
3. 处理命令行参数
#!/usr/bin/env node
console.log(`hello ${
process.argv[2]}`);
console.log('process.argv:', process.argv);
4. commander处理参数
版本8.1.0
引入依赖:
const program = require('commander');
4.1 option
function myParseInt(value, other) {
return parseInt(value);
}
program
.version('0.0.1', '-v, --version')
.option('-p --port <port>', '端口号', myParseInt, 8080)
.parse(process.argv);
const options = program.opts();
console.log('port: %j', options.port);
4.1.1 可变变量
program
.version('0.0.1', '-v, --version')
.option('-p --port <port>', '端口号', myParseInt, 8080)
.option('-m --many [vars...]', '可变变量')
.parse(process.argv);
const options = program.opts();
console.log('options', options);
4.1.2 必须的option
.requiredOption() 配置格式和option相同。
program
.version('0.0.1', '-v, --version')
.option('-p --port <port>', '端口号', myParseInt, 8080)
.option('-m --many [vars...]', '可变变量')
.requiredOption('-r --require [r]', '-r必须存在,不存在会报错')
.parse(process.argv);
const options = program.opts();
console.log('options', options);
报错:
正常:
4.1.3 no-前缀
no-option可以将option设置成false。
program
.version('0.0.1', '-v, --version')
.option('-p --port <port>', '端口号', myParseInt, 8080)
.option('-m --many [vars...]', '可变变量')
.requiredOption('-r --require [r]', '-f必须存在,不存在会报错', '99')
.option('-s --sauce [sauce]', '测试no-前缀,sauce可以使布尔类型也可以是值类型,也可以有默认值','300g')
.option('--no-sauce', '配置sauce前缀,将sauce的值设置为false')
.parse(process.argv);
const options = program.opts();
console.log('options', options);
参考地址:
commonder: https://segmentfault.com/a/1190000019350684