未命名的参数与commander.js

我正在看看commander.js,因为我想用Node.js来实现一个CLI。

使用命名参数很容易,因为“披萨”程序的例子显示:

program .version('0.0.1') .option('-p, --peppers', 'Add peppers') .option('-P, --pineapple', 'Add pineapple') .option('-b, --bbq', 'Add bbq sauce') .option('-c, --cheese [type]', 'Add the specified type of cheese [marble]', 'marble') .parse(process.argv); 

现在,例如,我可以使用以下方法调用该程序:

 $ app -p -b 

但是一个未命名的参数呢? 如果我想使用它,该怎么办?

 $ app italian -p -b 

? 我认为这不是非常罕见的,因此为cp命令提供文件并不要求你使用命名参数。 只是

 $ cp source target 

并不是:

 $ cp -s source -t target 

我如何使用commander.js来实现这个目标?

而且,如何告诉commander.js需要匿名参数呢? 例如,如果您看一下cp命令,则需要source和target。

老问题,但由于尚未得到答复…

使用当前版本的指挥官,可以使用位置参数。 有关详细信息,请参阅关于参数语法的文档 ,但使用您的cp示例将会是这样的:

 program .version('0.0.1') .arguments('<source> <target>') .action(function(source, target) { // do something with source and target }) .parse(process.argv); 

如果两个参数都不存在,这个程序将会投诉,并给出适当的警告信息。

你通过program.args获取所有未命名的参数。 将以下行添加到您的示例

 console.log(' args: %j', program.args); 

当你使用-p -b -c gouda arg1 arg2运行你的应用时,你会得到

 you ordered a pizza with: - peppers - bbq - gouda cheese args: ["arg1","arg2"] 

那你可以写一些类似的东西

 copy args[0] to args[1] // just to give an idea