:::info 人类之所以伟大是因为发明了工具 🔨 :::

知识储备

简单介绍下本文使用到的几个第三方库

commander

常用的命令行解决方案,用于处理终端命令行中输入的命令及编写命令行指令
就是用来定义你的脚手架里有哪些命令 🗒 详细使用说明
image.png

inquirer

可交互的命令行界面工具 ✔️ 详细使用说明

ora

加载过程中的 loading 动画效果,避免枯燥的等待 🕗 详细使用说明

chalk

给终端字体添加颜色,区分不同状态
立马拥有多彩的人生 🌈 详细使用说明

举个例子

创建项目

首先创建个新项目,输入你的 ~~个人 ~~项目信息

  1. mkdir [your-project]
  2. cd [your-project]
  3. yarn init

把上面说的几个工具都给安排上(PS. orachalk 最新版不支持 CommonJS 了,所以指定了低版本)

  1. yarn add ora@^5 chalk@^4 commander inquirer

定义命令

在根目录创建index.js , 写一点小命令

  1. const ora = require('ora')
  2. const chalk = require('chalk')
  3. const inquirer = require('inquirer')
  4. const program = require('commander')
  5. const spinner = ora()
  6. // 设置版本号
  7. program.version(require('./package').version, '-v', '版本号')
  8. // 添加命令
  9. program
  10. .command('time')
  11. .description('现在时间')
  12. .action(() => {
  13. console.log(chalk.cyan(new Date().toLocaleString()))
  14. })
  15. program
  16. .command('ask')
  17. .description('询问楼上322住的是不是马冬梅')
  18. .action(() => {
  19. inquirer.prompt([
  20. {
  21. type: 'list',
  22. message:"🤔 问谁呢?",
  23. name:"who",
  24. default:"楼下大爷",
  25. choices:[
  26. "楼下大爷",
  27. "路过的小朋友",
  28. ],
  29. }
  30. ]).then(answer => {
  31. spinner.succeed('楼上322住的是马冬梅家吗?')
  32. spinner.start('😳 思考中...')
  33. setTimeout(() => {
  34. spinner.fail('马什么梅?')
  35. }, 2000)
  36. })
  37. })
  38. // 重写默认的帮助选型、名字、描述
  39. program
  40. .helpOption('-h, --help', '帮助')
  41. .addHelpCommand('help [command]', '命令详情')
  42. program.parse(process.argv)

运行看看
zremn-t4uh7.gif

配置执行文件

作为一个命令行工具,你用 node index.js 运行,这和裸奔有什么区别?
so 咱们给它配置执行文件 bin

在项目目录下创建 bin 文件夹,把 index.js扔进去
image.png

改一下 package.json,添加 bin 说明

  1. {
  2. "name": "quan-cli",
  3. "version": "1.0.0",
  4. "description": "my cli",
  5. "main": "index.js",
  6. "repository": "https://github.com/wendygaoyuan/quan-cli.git",
  7. "author": "Wendy Gao <wendygaoyuan@163.com>",
  8. "license": "MIT",
  9. "private": false,
  10. "bin": {
  11. "quan-cli": "./bin/index.js"
  12. },
  13. "dependencies": {
  14. "chalk": "^4",
  15. "commander": "^9.1.0",
  16. "inquirer": "^8.2.2",
  17. "ora": "^5"
  18. }
  19. }

最后不要忘了把 index.js 里的版本号获取目录从 ./ 改成 ../

  1. // 设置版本号
  2. program.version(require('../package').version, '-v', '版本号')

nice ~ , 咱们在本地调试一下,在项目根目录运行

  1. sudo npm link

image.png

完美 用 Node.js 写个命令行工具 - 图5
最后的最后,不要忘记发布到 npm 中,同步给小伙伴们一起使用 ~

参考