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

相关推荐
进击的尘埃8 分钟前
Vue3 中 emit 能 await 吗?事件机制里的异步陷阱
javascript
青青家的小灰灰17 分钟前
告别 Prop Drilling:Context API 的陷阱、Reducer 模式与原子化状态库原理
前端·javascript·react.js
叶智辽20 分钟前
【Three.js后期处理】如何让你的场景拥有电影级调色
前端·three.js
进击的尘埃20 分钟前
CSS 变量 + 主题切换:从 CSS-in-JS 回归原生方案的实践之路
javascript
csdn飘逸飘逸20 分钟前
Autojs基础-按键模拟(keys)
javascript
前端付豪21 分钟前
Nest 项目小实践之前端注册登陆
前端·node.js·nestjs
wuhen_n21 分钟前
Suspense:异步组件加载机制
前端·javascript·vue.js
大雨还洅下21 分钟前
前端JS: ES6新特性
前端
wuhen_n22 分钟前
Teleport:渲染到任意DOM节点
前端·javascript·vue.js
进击的尘埃23 分钟前
组合式函数的设计模式:如何写出真正可复用的 Vue3 Composables
javascript