Commander无法处理多个命令参数

时间:2014-11-21 16:40:49

标签: node.js

我有以下commander命令,其中包含多个参数:

var program = require('commander');

program
  .command('rename <id> [name]')
  .action(function() {
    console.log(arguments);
  });

program.parse(process.argv);

使用该应用程序会产生以下结果:

$ node app.js 1 "Hello"
{ '0': '1',
  '1':
   { commands: [],
     options: [],
     _execs: [],
     _args: [ [Object] ],
     _name: 'rename',
     parent:
      { commands: [Object],
        options: [],
        _execs: [],
        _args: [],
        _name: 'app',
        Command: [Function: Command],
        Option: [Function: Option],
        _events: [Object],
        rawArgs: [Object],
        args: [Object] } } }

如您所见,该操作会收到第一个参数(<id>)和program,但不会收到第二个参数:[name]

我试过了:

  • 使[name]成为必需的参数。
  • 从命令行将名称不加引号传递给工具。
  • 将我的真实应用简化为上面的微小可复制程序。
  • 使用namerename <id> [name...])的可变参数,但这会导致1Hello被分配到与第一个参数相同的数组中,打败了id
  • 的目的

我错过了什么? commander是否只接受每个命令一个参数(在文档中看起来不是这样)?

2 个答案:

答案 0 :(得分:1)

我认为这是旧版commander中的错误。这适用于commander@2.9.0

答案 1 :(得分:0)

我遇到了同样的问题,并决定使用支持该功能的Caporal。您可以找到一个multiple commands here

的示例