从零到一:用 Node.js 打造你的专属 CLI 工具

2025-02-14
nodejs
65

为什么需要 CLI 工具?

CLI(命令行工具)是开发者提升效率的利器,例如 gitnpm 等工具都离不开 CLI。本文教你如何用 Node.js 快速构建一个功能丰富的 CLI 工具。让我们开始学习之旅吧。

封面

准备工作

  • 安装 Node.js 环境,参考文档:https://webfem.com/post/express

  • 初始化项目:npm init

  • 安装核心依赖:

    • commander: 可以监听控制台输入,处理命令参数

    • chalk:终端美化,提供多种终端样式,如高亮、斜体等

    • inquirer:交互式输入,提供选择菜单,提高 cli 交互性

    • ora: loading 效果

npm install commander chalk inquirer@8 ora@5

核心代码实现

1. 实现一个简单输出

第一步,我们先实现一个可以用 cli 命令执行的脚本

1.1 创建可执行的脚本 bin/index.js

#!/usr/bin/env node

console.log('Hello world')

执行脚本的入口一定要加 #!/usr/bin/env node

1.2package.json 中配置执行命令

"bin": {
  "kola": "bin/index.js"
},
  • 首先,cli 的执行命令需要写到 bin 这个属性下

  • 属性名是命令的执行名称,属性值是执行的脚本,这里的 kola是我随便起的名字

1.3 设置全局执行

  • 上一步设置好之后,可以通过 npx kola执行脚本

  • 也可以运行 npm link之后,通过 kola单命令即可执行

2. 脚本处理输入

cli 处理控制台的输入推荐使用commander,它可以快速处理用户输入,以及相关参数处理

const { program } = require("commander");

program
  .command("greet <name>")
  .action((name) => {
    console.log(`Hello, ${name}!`);
  });

program.parse(process.argv); // 确保调用 parse 方法

这里通过commander 定义了一个 greet命令,接受一个 name 参数

在用户输入 kola gree world 之后,cli 脚本获取到 greet 命令以及 world 这个参数,之后会输出 Hello,world

3. 配置参数

配置参数用到 commanderoption方法,获取参数数据可以在actionoptions 参数中获取

const chalk = require("chalk");

program
  .command("greet <name>")
  .option("-c, --color <color>", "设置文字颜色(如 red, green, blue)")
  .action((name, options) => {
    const color = options.color || "green";
    console.log(chalk[color](`你好,${name}!`));
  });

运行 npx kola greet space -c red可以得到红色的 你好,space!

4. 增加可选项

通过选择项配置,可以增强 cli 的交互性。我们可以利用 inquirer来生成选择项

const ora = require("ora");
const inquirer = require("inquirer");


program
  .command("quiz")
  .description("进行编程语言问答")
  .action(async () => {
    const answers = await inquirer.prompt([
      {
        type: "list",
        name: "language",
        message: "你最喜欢的编程语言是什么?",
        choices: ["JavaScript", "Python", "Rust", "Go"],
      },
    ]);
    const spinner = ora("正在保存答案...").start();
    setTimeout(() => {
      spinner.succeed(`已记录:你喜欢 ${answers.language}`);
    }, 1500);
  });

输入 npx kola quiz即可进行列表选择

总结

通过以上步骤,一个完整的 cli 工具系统就搭建完成。

原文地址:https://webfem.com/post/cli,转载请注明出处