likes
comments
collection
share

轻量级 Node.js 命令行参数库选哪个?

作者站长头像
站长
· 阅读数 4

常用 cli 参数解析

  1. Commander.js - 一个常用的轻量级的命令行界面框架
  2. Yargs - 可以帮助您解析命令行参数并生成优雅的用户界面。
  3. yargs-parser - yargs 使用的强大选项解析器
  4. arg - 是一个没有特定偏好和基本的命令行参数解析器
  5. minimist - 解析参数选项。该模块是 Optimist 命令行参数解析器的核心,但不包含所有花哨的装饰。

侧重点不同,Commander.js 是一个框架,功能大而全,其他的侧重于使用不同的风格解析参数。

下载量分析

下载量可能与其所在生态有关系:

  • Commander 的下载量是最大,达到的每周上亿的下载量。
  • 其次是 yargs 系列每周大概 8千多万的下载量。
  • 其次就是 vercel 没住大概 稳定在 2 千万左右,可能与 vercel 有很大的关系。
  • minimist 下载量接近 5 千万的下载量。

参数解析的核心

process.argv 是一个包含当前 Node.js 进程的命令行参数的数组。

参数从数组的第三个参数进行解析。

const args = process.argv.slice(2)

commander.js 中实用 prase 方法

const { program } = require('commander');

program
  .version('0.1.0')
  .option('-f, --file <filename>', 'Specify the file name')
  .parse(process.argv); // 实用 parse 方法

console.log('file:', program.file);

yargs 中需要访问 argv 属性

const yargs = require('yargs');

const argv = yargs
  .option('file', {
    alias: 'f',
    description: 'Specify the file name',
    type: 'string',
    demandOption: true,
  })
  .help()
  .alias('help', 'h')
  .argv; // 访问 argv 属性

console.log('file:', argv.file);

arg 中最简单,不用访问 argv 属性

const arg = require('arg');

const args = arg({
  '--file': String,
  '-f': '--file',
});

console.log('file:', args['--file']);

minimist 示例

minimist 需要访问argv 属性,并且 slice(2) 后的结果,args 是

const args = minimist(process.argv.slice(2));

args 是一个对象,第一属性是 _ 属性中是一个数组。执行下面的命令:

node app.js --a contentA --b contentB

得到的结果是:

{ _: [], a: 'contentA', b: 'contentB' }

注意:minimist 1.2.6 之前版本可能存在原型污染问题。

小结

从上面的例子可以看出 arg 和 minimist 最为简单,arg 甚至不用访问 procress.env 的属性。就访问参数而言使用:arg > minimist > yargs > commander

更多

微信搜索并关注公踪号 进二开物,更多技术 JS/TS/CSS/Rust 文章...

转载自:https://juejin.cn/post/7232252018714116151
评论
请登录