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 分钟前
前端【8】HTML+CSS+javascript实战项目----实现一个简单的待办事项列表 (To-Do List)
前端·javascript·css·html
lilu88888881 小时前
AI代码生成器赋能房地产:ScriptEcho如何革新VR/AR房产浏览体验
前端·人工智能·ar·vr
LCG元1 小时前
Vue.js组件开发-实现对视频预览
前端·vue.js·音视频
傻小胖1 小时前
shallowRef和shallowReactive的用法以及使用场景和ref和reactive的区别
javascript·vue.js·ecmascript
阿芯爱编程1 小时前
vue3 react区别
前端·react.js·前端框架
烛.照1032 小时前
Nginx部署的前端项目刷新404问题
运维·前端·nginx
YoloMari2 小时前
组件中的emit
前端·javascript·vue.js·微信小程序·uni-app
CaptainDrake2 小时前
力扣 Hot 100 题解 (js版)更新ing
javascript·算法·leetcode
浪浪山小白兔2 小时前
HTML5 Web Worker 的使用与实践
前端·html·html5
疯狂小料3 小时前
React 路由导航与传参详解
前端·react.js·前端框架