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` 方法添加事件监听器。

相关推荐
东风破_3 小时前
Docker 基础:为什么需要容器?
前端·后端·nginx
东风破_4 小时前
Docker 实战:使用 Nginx 作为容器入口代理 Node 服务
前端·后端·nginx
你别说话了4 小时前
Vue项目解决跨域
前端·javascript·vue.js
指尖时光.4 小时前
Three.js 超全入门综合案例
开发语言·javascript·ecmascript
唐青枫5 小时前
http-server:别再双击 index.html,一条命令把目录变成网站
前端·javascript
网安蟹佬霸5 小时前
OSINT开源情报收集实战:从信息搜集到资产测绘(2026最新万字保姆级指南)
前端·网络·安全·web安全·网络安全·开源
a1117766 小时前
3D历史建筑展览馆 THreeJS 开源
前端·开源
单线程_016 小时前
【源码阅读】Vue3 Tokenizer 词法分析器完整状态机流转深度梳理(3.4+ 新版架构)
前端
PBitW6 小时前
PM 丢来 3 个 Excel、12 个功能、4 种情形?用 TRAE Work 30 分钟整理成前端开发文档
前端·trae
学习星球8 小时前
Solid.js 实战:拆解官方 RealWorld 项目
开发语言·javascript·vue.js