一、简介
-
通过 NPM 制作命令行工具 - 入门案例 已经基本知道如何制作命令行工具了,现在就是内部命令处理。
-
如果不使用第三方插件辅助,那就只能对传入的参数进行一个一个判断处理,添加注释,这是很麻烦的,所以,就有了一些比较好用的辅助插件,列举下一些常用的。
二、常用辅助插件
-
Commander
-
Commander
是一个轻巧的nodejs
模块,提供了用户命令行输入和参数解析强大功能。Commander
源自一个同名的Ruby
项目。 -
辅助文档
Commander 快速上手
Commander 使用教程
Commander 详细使用
-
安装
$ npm i commander
-
常用举例
#!/usr/bin/env node const { program } = require('commander') const { version } = require('./package.json') // 当前路径 console.log(process.cwd()) // 配置版本号 program.version(version) // 介绍命令的使用 // program.usage('可以介绍命令的用法,进行举例') // 配置帮助提示,可以通过 $ dzm-cli --help 查询对应的 option 配置项,不包含子命令的 option 配置项 program.option('-d, --dzm [type]', 'Add cheese with optional type') // 配置帮助提示并支持监听 program .option('-x, --xyq [type]', 'Add cheese with optional type') .action((opts, cmd) => { // opts:跟下面解析用户传入的参数结果一样,是个对象,会包含所有的用户传入参数 // cmd:整个命令对象 console.log('【option 输出】:', opts) }) // 配置子命令 program // 子命令名称 .command('create <app-name>') .description('create a new project') // 子命令支持的属性,可以通过 $ dzm-cli create -h 查询对应的 option 配置项 .option('-f, --force, overwrite target derectory if it exists') // .usage('可以介绍命令的用法,进行举例') .action((value, cmd) => { // value:只会输出 <app-name> 的值 // cmd:子命令如果传入了子命令的 option 属性指令,这里就会带出,否则不带,是个空 console.log('【command 输出】:', value, cmd) }) // 接收传入的值 // program // .argument('<username>', 'user to login') // .argument('\[password]', 'password for user, if required', 'no password given') // .action((username, password) => { // console.log('username:', username) // console.log('password:', password) // }) // 监听 --help 指令,可以补充说明文档 program.on('--help', function () { console.log('如果觉得说明文档不全,可以这里追加补充!') }) // 解析用户传入的参数 // 1、先调用 parse,会将传入的参数,针对上面配置的指令与子命令进行分析,改执行的执行,该转成参数的转成参数 program.parse(process.argv) // 2、用户传入的所有参数 const opts = program.opts() // 用户传入的参数 // 执行 $ dzm-cli -d 123 456,输出的结果为:{ dzm: '123' } [ '456' ] // -d 后面的 123 为指令 dzm 的参数,后面多余的 456 则为附带的参数值,两者可混合存在 console.log('【argv | opts 输出】:', opts, program.args)
-
-
TerminalKit
-
terminal-kit
简化了与用户交互的许多东西,可以专注于在程序中开发重要的内容,有很多适合终端工具包的例子。例如:如果需要从网上下载一些内容,那么就需要向用户显示进度条等等。
-
主要功能:
文字样式(像 chalk) 编辑屏幕 进度条 用户输入
-
辅助文档
TerminalKit 表单输出、询问
TerminalKit 官方使用文档
-
进度条案例
#!/usr/bin/env node // Require the lib, get a working terminal var terminal = require('terminal-kit').terminal; var progressBar; var progress = 0; function updateProgress() { // 产生一个随机的进度值 progress += Math.random() / 10; progressBar.update(progress); // 检查是否完成 if (progress >= 1) { setTimeout(function () { terminal('\n'); process.exit(); }, 250); } else { setTimeout(updateProgress, 100 + Math.random() * 500); } } progressBar = terminal.progressBar({ width: 80, title: 'Downloading file:', eta: true, percent: true }); updateProgress();
-
-
Validator
-
validator
可以进行一系列常见的字符串验证(例如:电子邮件地址
、电话号码
、IP地址
等)。每当从用户那里获得输入时,这样的软件包都是必不可少的。用户会犯错误,并会在文本框中输入一些非常奇怪的东西,所以需要一个验证输入的包,避免数据损坏或服务器崩溃。 -
以下是一些常用的验证器:
isEmail(str [, options]) isIP(str [, version]) isMobilePhone(str, locale) isURL(str [, options])
-
validator
也提供检测器,可以对输入字符串进行规范化、删除或转义。例如对用户提交的内容进行清理,避免输入恶意的HTML
或JavaScript
代码。 -
下面是常用的检测器:
blacklist(input, chars) escape(input) normalizeEmail(email [, options]) whitelist(input, chars)
normalizeEmail()
方法它能够确保电子邮件地址都是小写字母,甚至可以删除需要忽略的字符。假设你有电子邮件abc.def+ghi@163.com
,normalizeEmail()
会将其标准化为abcdefghi@163.com
。
-