当前位置: 首页 > news >正文

commander.js基本用法

准备工作

  • 安装nodejs
  • 安装commander.js,执行npm install commander --save

version方法

作用:定义命令程序的版本号

参数说明:

  • 版本号<必须>
  • 自定义flag<可省略>,默认为 -V--version

使用:

(1)只传入版本信息

// index.js
const program = require('commander');
program
	.version('1.0.0')
  .parse(process.argv);
复制代码
  • 执行node index.js -V 或者 node index.js --version得到版本号。

(2)自定义flag

// index.js
const program = require('commander');
program
	.version('1.0.0', '-v, --version')
	.parse(process.argv);
复制代码
  • 当自定义flag时,--version不能被省略
  • 执行node index.js -v或者 node index.js --version得到版本号。

option方法

作用:定义命令的选项

参数说明:

  • 自定义flag<必须>
    • 一长一短的flag,中间可以逗号、竖线或空格隔开
    • flag后面可以跟参数,<>定义必需参数,[]定义可选参数
  • 选项的描述<可省略>:在使用-h或者--help时会显示
  • 选项的默认值<可省略>

使用

(1)定义多个选项

// index.js
const program = require('commander');
program
	.version('1.0.0')
	.option('-a, --add', 'add Something')
	.option('-u, --update', 'update Something')
	.option('-r, --remove', 'remove Something')
  .parse(process.argv);

console.log('You choose: ');
if (program.add) console.log('  add Something');
if (program.update) console.log('  update Something');
if (program.remove) console.log('  remove Something');
复制代码
  • 短flag使用-,长flag使用--
  • program.XXX可以得到输入的选项
  • 执行node index.js -a或者node index.js --add会打印You choose: add Something

(2)多单词形式

// index.js
const program = require('commander');
program
	.version('1.0.0')
	.option('--add-file', 'add a file')
  .parse(process.argv);

if (program.addFile) console.log('add a file')
复制代码
  • 当选项为多单词形式时,使用驼峰形式得到输入项
  • 执行node index.js --add-file会打印add a file

(3)以--no形式开头的选项,代表后面紧跟单词的相反面

// index.js
const program = require('commander');
program
	.version('1.0.0')
	.option('--no-add', 'not add a file')
  .parse(process.argv);

if (program.add) console.log('add a file')
else console.log('not add a file')
复制代码
  • 执行node index.js --no-add会打印not add a file

(4)选项后面使用<>或[]

// index.js
const program = require('commander');
program
	.version('1.0.0')
	.option('-a, --add <fileName>', 'add a file')
  .parse(process.argv);

console.log('add a file named: ' + program.add)
复制代码
  • 执行node index.js -a demo.js会打印add a file named: demo.js

command方法

作用:自定义命令

参数说明:

  • 自定义命令名称
    • 名称<必须>
    • 命令参数<可选>:
      • <>[]定义参数
      • 命令的最后一个参数可以是可变的,需要在数组后面加入 ... 标志;在命令后面传入的参数会
  • 命令描述<可省略>
  • 配置选项<可省略>:可配置noHelp、isDefault等

使用

const program = require('commander');
program
	.version('1.0.0')
	.command('my-cli <path>')
	.option('-a, --add <fileName>', 'add a file')
	.option('-u, --update <fileName>', 'update a file')
	.option('-r, --remove <fileName>', 'remove a file')
	.action(function(path, cmd) {
		console.log(path)
		console.log(cmd.add)
	})

program.parse(process.argv);
复制代码
  • 使用action后会开启输入的选项校验,若输入了未定义的选项,则抛出错误
  • 执行node index.js my-cli C -a demo.js会打印C demo.js

description方法

作用:命令的描述性语句

参数说明

  • 命令的描述

使用

// index.js
const program = require('commander');
program
	.version('1.0.0')
	.description('It is my cli')
  .parse(process.argv);
复制代码

action方法

作用:定义命令的回调函数

参数说明:

  • 回调函数

parse方法

作用:用于解析process.argv,设置options以及触发commands

参数说明:

  • process.argv

相关文章:

  • requestAnimationFrame 使用
  • Flutter实战之自定义日志打印组件
  • electron原来这么简单----打包你的react、VUE桌面应用程序
  • 36.Azure制作自定义的Windows虚拟机映像
  • apollo客户端springboot实战(四)
  • python 全栈开发,Day4
  • 概率生成函数学习笔记
  • Qt托盘程序
  • LayaAir疑难杂症之一:List渲染无法生效
  • Spring aop详解
  • 解决Linux下普通用户无法使用root连接MySQL服务
  • BZOJ4514: [Sdoi2016]数字配对(费用流)
  • Leetcode PHP题解--D10 942. DI String Match
  • Java学习笔记之ArrayList基本用法
  • 阿里巴巴2020届校招实习生内推开始啦
  • “Material Design”设计规范在 ComponentOne For WinForm 的全新尝试!
  • 【跃迁之路】【519天】程序员高效学习方法论探索系列(实验阶段276-2018.07.09)...
  • codis proxy处理流程
  • Computed property XXX was assigned to but it has no setter
  • Django 博客开发教程 8 - 博客文章详情页
  • ECMAScript 6 学习之路 ( 四 ) String 字符串扩展
  • Laravel 中的一个后期静态绑定
  • niucms就是以城市为分割单位,在上面 小区/乡村/同城论坛+58+团购
  • Synchronized 关键字使用、底层原理、JDK1.6 之后的底层优化以及 和ReenTrantLock 的对比...
  • tab.js分享及浏览器兼容性问题汇总
  • Vue2 SSR 的优化之旅
  • 构造函数(constructor)与原型链(prototype)关系
  • 试着探索高并发下的系统架构面貌
  • 数据科学 第 3 章 11 字符串处理
  • 算法之不定期更新(一)(2018-04-12)
  • 小程序button引导用户授权
  • 一份游戏开发学习路线
  • 一些基于React、Vue、Node.js、MongoDB技术栈的实践项目
  • 在electron中实现跨域请求,无需更改服务器端设置
  • 06-01 点餐小程序前台界面搭建
  • 《天龙八部3D》Unity技术方案揭秘
  • ​一、什么是射频识别?二、射频识别系统组成及工作原理三、射频识别系统分类四、RFID与物联网​
  • (1)Nginx简介和安装教程
  • (12)目标检测_SSD基于pytorch搭建代码
  • (3)选择元素——(17)练习(Exercises)
  • (PHP)设置修改 Apache 文件根目录 (Document Root)(转帖)
  • (vue)页面文件上传获取:action地址
  • (办公)springboot配置aop处理请求.
  • (附源码)springboot猪场管理系统 毕业设计 160901
  • (附源码)ssm学生管理系统 毕业设计 141543
  • (已更新)关于Visual Studio 2019安装时VS installer无法下载文件,进度条为0,显示网络有问题的解决办法
  • (原創) 物件導向與老子思想 (OO)
  • (转)VC++中ondraw在什么时候调用的
  • .cn根服务器被攻击之后
  • .NET 4.0中使用内存映射文件实现进程通讯
  • .NET delegate 委托 、 Event 事件,接口回调
  • .NET 中 GetProcess 相关方法的性能
  • .net访问oracle数据库性能问题
  • .net分布式压力测试工具(Beetle.DT)
  • .Net语言中的StringBuilder:入门到精通