指挥官为描述命令抛出错误

时间:2018-03-06 11:53:33

标签: node.js command-line-interface node-commander

以下是使用commander在nodejs中添加命令的简单示例:

'use strict';

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

const run = () => {
    const program = new Command();

    console.log('CMD');
    program.command('cmd [opts...]')
        .action((opts) => {
            console.log('OPTS');
        });

    program.parse(process.argv);
};

run();

在这种情况下一切正常,但是当我添加说明和选项时,commander会抛出错误:

program.command('cmd [opts...]', 'DESCRIPTION', {isDefault: true})

node test-commander.js cmd opts

test-commander-cmd(1) does not exist, try --help

我的环境:

node v8.9.3
npm 5.3.0
commander 2.12.2

1 个答案:

答案 0 :(得分:0)

这是指挥官宣称的行为。从Git-style sub-commands下的npm页面...

  

当使用description参数调用.command()时,不应调用.action(回调)来处理子命令,否则会出错。这告诉指挥官你将为子命令使用单独的可执行文件,就像git(1)和其他流行的工具一样。   命令员将尝试使用名称program-command搜索条目脚本目录中的可执行文件(如./examples/pm),如pm-install,pm-search。

因此,当您添加类似的描述时,它会假设您有另一个名为test-commander-cmd的可执行文件用于子命令。

如果指挥官的行为不符合你的期望,我可能会建议我查看我发布的一个名为wily-cli的文件包......当然,只有当你没有致力于指挥官时才会这样做;)

假设您的代码位于file.js,您的wily-cli示例将如下所示......

const cli = require('wily-cli');

const run = () => {
  cli
    .command('cmd [opts...]', 'DESCRIPTION', (options, parameters) => { console.log(parameters.opts); })
    .defaultCommand('cmd');
};

run();

// "node file.js option1 option2" will output "[ 'option1', 'option2' ]"