Commander 一款命令行自定义命令依赖

一、安装 `commander` 插件

bash 复制代码
npm install commander

二、基本用法

1. 创建一个简单的命令行程序

创建一个 JavaScript 文件,例如 `mycli.js`,并添加以下代码:

javascript 复制代码
// 引入 `commander` 模块并获取 `program` 对象。

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

program

  .version("1.0.0") // 设置命令行工具的版本

  .description("A simple CLI tool using commander") // 设置命令行工具的描述

  .option("-n, --name <name>", "Your name") // 添加一个选项 `-n` 或 `--name`,并指定其为一个参数 `<name>`,同时提供描述。

  .option("-a, --age <age>", "Your age") // 添加另一个选项 `-a` 或 `--age`,并指定其为一个参数 `<age>`,同时提供描述。

  .action((options) => {

    // 定义执行命令时的操作,这里使用 `options` 对象来获取用户输入的选项值,并打印出问候语。

    console.log(`Hello, ${options.name}! You are ${options.age} years old.`);

  });

// 解析命令行参数

program.parse(process.argv);

2. 运行命令行程序

bash 复制代码
node mycli.js -n YQ -a 18

# Hello, YQ! You are 18 years old.

三、使用子命令

1. 创建子命令

你可以在 `program` 对象上添加子命令,例如:

javascript 复制代码
const { program } = require("commander");

program.version("1.0.0").description("A simple CLI tool using commander");

program

  .command("greet") // 创建一个名为 `greet` 的子命令

  .alias("gre") // 创建快捷命令 gre = greet

  .description("Greet a person") // 为 `greet` 子命令添加描述

  .option("-n, --name <name>", "Your name") // 为 `greet` 子命令添加选项

  .action((options) => {

    // 为 `greet` 子命令添加操作函数

    console.log(`Hello, ${options.name}!`);

  });

program

  .command("sum <a> <b>") // 创建一个名为 `sum` 的子命令,需要两个参数 `<a>` 和 `<b>`

  .description("Sum two numbers")

  .action((a, b) => {

    // 为 `sum` 子命令添加操作函数,将 `a` 和 `b` 转换为整数并求和

    const result = parseInt(a) + parseInt(b);

    console.log(`The sum of ${a} and ${b} is ${result}`);

  });

program.parse(process.argv);

2. 运行子命令

bash 复制代码
node mycli.js greet -n YQ

# Hello, YQ!

node mycli.js sum 5 3

# The sum of 5 and 3 is 8

四、使用命令参数

1. 处理命令参数

你可以直接在 `action` 函数中处理命令参数,例如:

javascript 复制代码
program

  .command("echo <message...>") // 创建一个名为 `echo` 的命令,使用 `...` 表示可以接受多个参数。

  .description("Echo the message")

  .action((...args) => {

    // 使用扩展运算符 `...` 接收多个参数。

    const message = args.slice(0, -1).join(" "); // 将除最后一个参数(最后一个参数是 `commander` 内部的)之外的所有参数拼接为一个字符串。

    console.log(message);

  });

2. 运行命令

使用以下命令运行:

javascript 复制代码
node mycli.js echo Hello World

# Hello,World [object Object]

五、添加帮助信息

1. 自定义帮助信息

你可以自定义帮助信息,例如:

javascript 复制代码
// 添加一个事件监听器,当用户输入 `--help` 时,打印自定义的帮助信息。

program.on("--help", () => {

  console.log("");

  console.log("Examples:");

  console.log("  $ mycli greet --name Alice");

  console.log("  $ mycli sum 5 3");

  console.log("  $ mycli echo Hello World");

});

六、总结

`commander` 是一个强大的命令行工具,可以帮助你创建复杂的命令行程序。

通过 `option` 方法添加选项,`command` 方法添加子命令,`action` 方法定义操作。

使用 `parse` 方法解析命令行参数,使用 `on` 方法添加事件监听器。

相关推荐
Dontla34 分钟前
为什么React列表项需要key?(React key)(稳定的唯一标识key有助于React虚拟DOM优化重绘大型列表)
javascript·react.js·ecmascript
EndingCoder2 小时前
React从基础入门到高级实战:React 实战项目 - 项目三:实时聊天应用
前端·react.js·架构·前端框架
阿阳微客3 小时前
Steam 搬砖项目深度拆解:从抵触到真香的转型之路
前端·笔记·学习·游戏
德育处主任Pro3 小时前
『React』Fragment的用法及简写形式
前端·javascript·react.js
CodeBlossom4 小时前
javaweb -html -CSS
前端·javascript·html
CodeCraft Studio4 小时前
【案例分享】如何借助JS UI组件库DHTMLX Suite构建高效物联网IIoT平台
javascript·物联网·ui
打小就很皮...4 小时前
HBuilder 发行Android(apk包)全流程指南
前端·javascript·微信小程序
集成显卡5 小时前
PlayWright | 初识微软出品的 WEB 应用自动化测试框架
前端·chrome·测试工具·microsoft·自动化·edge浏览器
前端小趴菜056 小时前
React - 组件通信
前端·react.js·前端框架
xd000026 小时前
11. vue pinia 和react redux、jotai对比
node.js