NPM 制作命令行工具 - 进阶辅助库

简介: NPM 制作命令行工具 - 进阶辅助库

一、简介

  • 通过 NPM 制作命令行工具 - 入门案例 已经基本知道如何制作命令行工具了,现在就是内部命令处理。
  • 如果不使用第三方插件辅助,那就只能对传入的参数进行一个一个判断处理,添加注释,这是很麻烦的,所以,就有了一些比较好用的辅助插件,列举下一些常用的。

二、常用辅助插件

$ 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)
  • terminal-kit 简化了与用户交互的许多东西,可以专注于在程序中开发重要的内容,有很多适合终端工具包的例子。
    例如:如果需要从网上下载一些内容,那么就需要向用户显示进度条等等。
  • 主要功能:
文字样式(像 chalk)
  编辑屏幕
  进度条
  用户输入
#!/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 可以进行一系列常见的字符串验证(例如:电子邮件地址电话号码IP地址等)。每当从用户那里获得输入时,这样的软件包都是必不可少的。用户会犯错误,并会在文本框中输入一些非常奇怪的东西,所以需要一个验证输入的包,避免数据损坏或服务器崩溃。
  • 以下是一些常用的验证器:
isEmail(str [, options])
isIP(str [, version])
isMobilePhone(str, locale)
isURL(str [, options])
  • validator 也提供检测器,可以对输入字符串进行规范化、删除或转义。例如对用户提交的内容进行清理,避免输入恶意的 HTMLJavaScript 代码。
  • 下面是常用的检测器:
blacklist(input, chars)
escape(input)
normalizeEmail(email [, options])
whitelist(input, chars)
  • normalizeEmail() 方法它能够确保电子邮件地址都是小写字母,甚至可以删除需要忽略的字符。假设你有电子邮件 abc.def+ghi@163.comnormalizeEmail() 会将其标准化为 abcdefghi@163.com
相关文章
|
4月前
|
JavaScript 开发工具 git
使用TS+rollup打造一个npm工具库
使用TS+rollup打造一个npm工具库
187 0
|
前端开发 JavaScript
rollup从0到1将react组件库打包发布npm
rollup从0到1将react组件库打包发布npm记录全过程
642 1
rollup从0到1将react组件库打包发布npm
|
JavaScript 前端开发 Ruby
NPM 制作命令行工具 - 进阶辅助库
NPM 制作命令行工具 - 进阶辅助库
85 0
|
JavaScript API 开发工具
如何从0开发一个Vue组件库并发布到npm(下)
如何从0开发一个Vue组件库并发布到npm(下)
110 0
|
JavaScript
如何从0开发一个Vue组件库并发布到npm(上)
如何从0开发一个Vue组件库并发布到npm(上)
157 0
怎么将自己写的库发布到npm上面?
怎么将自己写的库发布到npm上面?
193 0
怎么将自己写的库发布到npm上面?
|
JSON JavaScript 数据格式
js:使用npm库csvtojson将 CSV 转换为 JSON 字符串
js:使用npm库csvtojson将 CSV 转换为 JSON 字符串
177 0
|
JavaScript Shell API
|
JavaScript 前端开发 测试技术
为了深入学习JS我写了一个JS工具库 | 从零到一发布到npm上(2)
为了深入学习JS我写了一个JS工具库 | 从零到一发布到npm上(2)
157 0
为了深入学习JS我写了一个JS工具库 | 从零到一发布到npm上(2)
|
1月前
|
缓存 资源调度 JavaScript
npx与npm的差异解析,以及包管理器yarn与Node版本管理工具nvm的使用方法详解
npx与npm的差异解析,以及包管理器yarn与Node版本管理工具nvm的使用方法详解
33 0
下一篇
无影云桌面