Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/35.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js commander.js的未命名参数_Node.js_Command Line Interface - Fatal编程技术网

Node.js commander.js的未命名参数

Node.js commander.js的未命名参数,node.js,command-line-interface,Node.js,Command Line Interface,我目前正在研究如何使用Node.js实现CLI 使用命名参数很容易,如“pizza”程序示例所示: 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 sp

我目前正在研究如何使用Node.js实现CLI

使用命名参数很容易,如“pizza”程序示例所示:

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
命令,则需要源和目标。

通过
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

在当前版本的commander中,可以使用位置参数。有关详细信息,请参见,但使用您的
cp
示例,它将类似于:

program
.version('0.0.1')
.arguments('<source> <target>')
.action(function(source, target) {
    // do something with source and target
})
.parse(process.argv);
程序
.版本('0.0.1')
.参数(“”)
.操作(功能(源、目标){
//对源和目标执行一些操作
})
.parse(process.argv);

如果两个参数都不存在,此程序将进行投诉,并给出相应的警告消息。

基本上,这是一个不错的选项,但是-如何指定参数是必需的?您可以执行类似于
if(!program.args.length)console.log('请使用以下语法:cp source destination')的操作。
当然可以,但我的问题是commander.js是否有内置的支持,包括强制和它所有其他的好功能。你知道这一点吗@GoloRoden@GoloRoden您可以通过使用尖括号指定参数来强制设置参数,例如
,并通过使用方括号来选择参数,例如
[arg2]