如何在 yargs 中指定默认子命令

How do I specify a default subcommand in yargs?

本文关键字:默认 命令 yargs      更新时间:2023-09-26

我正在使用yargs创建一个构建工具,其中包含"构建","链接","清理"等子命令。

我希望能够在没有参数的情况下键入./build.js并调用"build"子命令处理程序作为默认值。

我能够这样做到:

var argv = yargs
  .usage("I am usage.")
  .command('bundle', 'Create JS bundles', bundle)
  .command('link', 'Symlink JS files that do not need bundling', link)
  .command('clean', 'Remove build artifacts', clean)
  .command('build', 'Perform entire build process.', build)
  .help('help')
  .argv;
if (argv._.length === 0) { build(); }

但这对我来说似乎有点笨拙,如果我想在"build"子命令中添加任何其他位置参数,可能会导致问题。

有没有办法在 yargs 的语义中做到这一点?关于.command()的文件可以更清楚。

正如@sthzg所评论的那样,您现在可以拥有默认命令:

const argv = require('yargs')
  .command('$0', 'the default command', () => {}, (argv) => {
    console.log('this command will be run by default')
  })

Yargs 本身似乎不提供此功能。NPM 上有一个第三方软件包,可以增强 yargs 做你想做的事。https://www.npmjs.com/package/yargs-default-command

var yargs = require('yargs');
var args = require('yargs-default-command')(yargs);
args
  .command('*', 'default command', build)
  .command('build', 'build command', build)
  .args;