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

时间:2016-07-07 22:14:01

标签: javascript node.js yargs

我正在使用yargs创建一个构建工具,其中包含" build"," link"," clean"等等的子命令

我希望能够在没有参数的情况下输入./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()上的文档可能更清楚。

2 个答案:

答案 0 :(得分:1)

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;

答案 1 :(得分:1)

如@sthzg所评论,您现在可以拥有default commands

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