前言
在使用NodeJs过程中,有很多包都支持全局安装,然后提供一个命令,然后在命令行我们就可以完成一些任务,像 express, grunt, bower, yeoman, reap, karma, requirejs 等。有时候,我们也需要自己开发这样的命令行工具。
使用自定义的Node命令行,在我们的很多项目里面都有使用过,而且真的很好用,尤其是我们内部还有一些项目是辅助项目,比如多语言翻译平台,这些项目都是内部项目,但是线上的项目有涉及一些资源和文件,都跟这些内部项目息息相关。这时候我们就会开发一些Node命令行提供给开发人员,用于开发人员的更便捷操作。接下来的几篇都会讲到使用自定义的Node命令行在开发的过程中,所能提供的便捷有多好用。本篇主要是讲一下在开发Node命令行的时候,经常使用的几个npm 库。
包括但是并不仅限于:
commander - 用户命令行输入和参数解析
commander灵感来自 Ruby,它提供了用户命令行输入和参数解析的强大功能,可以帮助我们简化命令行开发。
根据其官方的描述,具有以下特性:
- 参数解析
- 强制多态
- 可变参数
- Git 风格的子命令
- 自动化帮助信息
- 自定义帮助等
简单的来说,就是用来做命令行的输入和所输入参数的解析, API 如下:
- command – 定义命令行指令,后面可跟上一个name,用空格隔开,如 .command( ‘app [name] ‘)
- alias – 定义一个更短的命令行指令 ,如执行命令$ app m 与之是等价的
- description – 描述,它会在help里面展示
- option – 定义参数。它接受四个参数,在第一个参数中,它可输入短名字 -a和长名字–app ,使用 | 或者,分隔,在命令行里使用时,这两个是等价的,区别是后者可以在程序里通过回调获取到;第二个为描述, 会在 help 信息里展示出来;第三个参数为回调函数,他接收的参数为一个string,有时候我们需要一个命令行创建多个模块,就需要一个回调来处理;第四个参数为默认值
- action – 注册一个callback函数,这里需注意目前回调不支持let声明变量
- parse – 解析命令行
举个例子:
1 |
|
使用简写命令执行:
加上参数a:
当然还有命令的自定义帮助信息:
inquirer - 命令行交互
这个组件可以让我们跟命令行进行交互,它提供了用户界面和查询会话流程。
主要有一下功能:
- input–输入
- validate–验证
- list–列表选项
- confirm–提示
- checkbox–复选框等等
还是一样举个例子,语法很简单,以下只是部分代码:
1 | const inquirer = require('inquirer'); |
chalk - 美化命令行的输出
它具有轻量级、高性能、学习成本低等特点。
还是一样举个例子:
1 | inquirer.prompt(promps).then(function (answers) { |
结语
接下来会通过几个例子来创建几个Node的命令行。