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

相关推荐
王码码20351 小时前
Flutter for OpenHarmony:Flutter 三方库 algoliasearch 毫秒级云端搜索体验(云原生搜索引擎)
android·前端·git·flutter·搜索引擎·云原生·harmonyos
发现一只大呆瓜1 小时前
深入浅出 AST:解密 Vite、Babel编译的底层“黑盒”
前端·面试·vite
天天鸭1 小时前
前端仔写了个 AI Agent,才发现大模型只干了 10% 的活
前端·python·ai编程
发现一只大呆瓜1 小时前
前端模块化:CommonJS、AMD、ES Module三大规范全解析
前端·面试·vite
IT_陈寒2 小时前
一文搞懂JavaScript的核心概念
前端·人工智能·后端
IT_陈寒2 小时前
Java开发者必看!5个提升开发效率的隐藏技巧,你用过几个?
前端·人工智能·后端
前端Hardy2 小时前
Wails v3 正式发布:用 Go 写桌面应用,体积仅 12MB,性能飙升 40%!
前端·javascript·go
Highcharts.js2 小时前
Highcharts React v4 迁移指南(下):分步代码示例与常见问题解决
javascript·react.js·typescript·react·highcharts·代码示例·v4迁移
Laurence2 小时前
Qt 前后端通信(QWebChannel Js / C++ 互操作):原理、示例、步骤解说
前端·javascript·c++·后端·交互·qwebchannel·互操作
Pu_Nine_92 小时前
JavaScript 字符串与数组核心方法详解
前端·javascript·ecmascript