20

我目前正在查看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

如何使用 command.js 实现这一点?

而且,我如何告诉 command.js 需要未命名的参数?例如,如果您查看cp命令,则需要源和目标。

4

2 回答 2

14

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

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

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

于 2016-02-14T23:28:49.093 回答
7

您可以通过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
于 2013-01-28T08:02:50.497 回答