用 Node.js 写个命令行工具
知识储备
简单介绍下本文使用到的几个第三方库
commander
常用的命令行解决方案,用于处理终端命令行中输入的命令及编写命令行指令
就是用来定义你的脚手架里有哪些命令 🗒 详细使用说明
inquirer
可交互的命令行界面工具 ✔️ 详细使用说明
ora
加载过程中的 loading 动画效果,避免枯燥的等待 🕗 详细使用说明
chalk
给终端字体添加颜色,区分不同状态立马拥有多彩的人生 🌈 详细使用说明
举个例子
创建项目
首先创建个新项目,输入你的 个人 项目信息
mkdir [your-project]
cd [your-project]
yarn init
把上面说的几个工具都给安排上(PS. ora 和 chalk 最新版不支持 CommonJS 了,所以指定了低版本)
yarn add ora@^5 chalk@^4 commander inquirer
定义命令
在根目录创建 index.js , 写一点小命令
const ora = require('ora')
const chalk = require('chalk')
const inquirer = require('inquirer')
const program = require('commander')
const spinner = ora()
// 设置版本号
program.version(require('./package').version, '-v', '版本号')
// 添加命令
program
.command('time')
.description('现在时间')
.action(() => {
console.log(chalk.cyan(new Date().toLocaleString()))
})
program
.command('ask')
.description('询问楼上 322 住的是不是马冬梅')
.action(() => {
inquirer
.prompt([
{
type: 'list',
message: '🤔 问谁呢?',
name: 'who',
default: '楼下大爷',
choices: ['楼下大爷', '路过的小朋友']
}
])
.then((answer) => {
spinner.succeed('楼上 322 住的是马冬梅家吗?')
spinner.start('😳 思考中...')
setTimeout(() => {
spinner.fail('马什么梅?')
}, 2000)
})
})
// 重写默认的帮助选型、名字、描述
program.helpOption('-h, --help', '帮助').addHelpCommand('help [command]', '命令详情')
program.parse(process.argv)
运行看看
配置执行文件
作为一个命令行工具,你用 node index.js 运行,这和裸奔有什么区别?
so 咱们给它配置执行文件 bin
在项目目录下创建 bin 文件夹,把 index.js 扔进去
改一下 package.json,添加 bin 说明
{
"name": "quan-cli",
"version": "1.0.0",
"description": "my cli",
"main": "index.js",
"repository": "https://github.com/wendygaoyuan/quan-cli.git",
"author": "Wendy Gao <wendygaoyuan@163.com>",
"license": "MIT",
"private": false,
"bin": {
"quan-cli": "./bin/index.js"
},
"dependencies": {
"chalk": "^4",
"commander": "^9.1.0",
"inquirer": "^8.2.2",
"ora": "^5"
}
}
最后不要忘了把 index.js 里的版本号获取目录从 ./ 改成 ../
// 设置版本号
program.version(require('../package').version, '-v', '版本号')
nice ~ , 咱们在本地调试一下,在项目根目录运行
sudo npm link
完美
最后的最后,不要忘记发布到 npm 中,同步给小伙伴们一起使用 ~
参考
PREV
服务监控:Sentry 初探
NEXT