用 Node.js 写CLI, yargs 和 commander 的对比

chat

yargscommander 是两个用于构建 Node.js 命令行界面 (CLI) 应用程序的流行库。它们都提供了丰富的功能来解析命令行参数和选项,但它们在使用方式和设计理念上有一些不同。下面是对它们的简要比较和介绍:

yargs

  • 设计理念yargs 的目标是让 CLI 工具的创建变得简单和直观。它提供了强大的功能来解析复杂的命令行参数,并且可以很容易地处理嵌套命令。
  • 特性
    • 支持嵌套命令,可以轻松创建多级命令结构。
    • 自动生成帮助信息和命令行文档。
    • 支持别名、默认值、类型检查等。
    • 可以使用 .argv 属性直接获取解析后的参数对象。
  • 用法示例
const yargs = require('yargs/yargs');
const { hideBin } = require('yargs/helpers');

const argv = yargs(hideBin(process.argv))
  .command('serve [port]', 'start the server', (yargs) => {
    return yargs
      .positional('port', {
        describe: 'port to bind on',
        default: 5000
      })
  }, (argv) => {
    if (argv.verbose) console.info(`start server on :${argv.port}`)
    serve(argv.port)
  })
  .option('verbose', {
    alias: 'v',
    type: 'boolean',
    description: 'Run with verbose logging'
  })
  .argv;

commander

  • 设计理念commander 是一个轻量级的命令行框架,灵感来自 Ruby 的 commander 库。它的 API 设计直观,适合快速构建 CLI 工具。
  • 特性
    • 支持定义命令和子命令。
    • 提供链式 API,简洁易读。
    • 自动生成帮助信息。
    • 支持选项参数、必选参数和可选参数。
  • 用法示例
const { Command } = require('commander');
const program = new Command();

program
  .name('my-cli')
  .description('An example CLI for demonstration')
  .version('1.0.0');

program.command('serve')
  .description('start the server')
  .argument('[port]', 'port to bind on', 5000)
  .option('-v, --verbose', 'enable verbose mode')
  .action((port, options) => {
    if (options.verbose) console.log(`Verbose mode enabled`);
    console.log(`Server running on port ${port}`);
  });

program.parse(process.argv);

选择哪个?

  • 复杂度和功能:如果你的 CLI 工具需要处理复杂的命令和参数,yargs 可能更适合,因为它更灵活,功能更强大。
  • 简单性和易用性:如果你需要一个简单的 CLI 工具,commander 的链式 API 可能更容易上手。

最终选择哪个库取决于你的项目需求和个人偏好。两者都非常成熟,并且有良好的社区支持。

本文通过 YUQUE WORDPRESS 同步自语雀

版权声明:
作者:东明兄
链接:https://blog.crazyming.com/note/3234/
来源:CrazyMing
文章版权归作者所有,未经允许请勿转载。

THE END
分享
二维码
海报
用 Node.js 写CLI, yargs 和 commander 的对比
yargs 和 commander 是两个用于构建 Node.js 命令行界面 (CLI) 应用程序的流行库。它们都提供了丰富的功能来解析命令行参数和选项,但它们在使用方式和设计理……
<<上一篇
下一篇>>
chat