我无法找到正确配置位置参数的方法。我有这段代码:
#!/usr/bin/env node
const create = (argv) => {
console.log('create component with name:', argv.name)
}
const createBuilder = (yargs) => {
yargs.positional('name', {
desc: 'Name of the new component',
})
}
/* eslint-disable no-unused-expressions */
require('yargs')
.command({
command: 'create <name>',
desc: 'Create a new component',
builder: createBuilder,
handler: create,
})
.demandCommand(1, 'A command is required')
.help()
.argv
如果用户在create命令后没有指定名称,我想提供自定义错误消息。
我从文档中不清楚如何做到这一点,并且在经历github问题时我遇到了这个评论(#928):
我建议改为使用demandCommand和demandOption(每个都是 记录在案。)
这些允许您配置位置参数和标志参数 分别
我已尝试过与
的各种组合.demandCommand(1, 'You need to provide name for the new component')
或
.demandOption('name', 'You need to provide name for the new component')
但没有运气。有人知道怎么做吗?
答案 0 :(得分:1)
tl; dr-尝试通过在命令名称的开头添加字符串*
或$0
来使您的命令成为默认命令。
我发现,当在default command中定义位置参数时,仅会尊重位置参数(即:显示在帮助菜单中,并且在未提供所需位置时抛出错误)。
下面是使它与代码一起使用的示例(请注意,您不再需要使用.demandCommand()
):
require('yargs')
.scriptName('cli-app')
.command({
command: '$0 create <name>',
desc: 'Create a new component',
builder: yargs => {
yargs.positional('name', {
desc: 'Name of the new component'
});
},
handler: function(argv) {
console.log('this is the handler function!');
}
})
.help().argv;
输出(请注意“没有足够的非选项参数:必须有1个,至少需要2个”行):
➞ node cli-app.js create 1 ↵
cli-app create <name>
Create a new component
Positionals:
name Name of the new component
Options:
--version Show version number [boolean]
--help Show help [boolean]
Not enough non-option arguments: got 1, need at least 2
答案 1 :(得分:0)
yargs的命令选项可以采用两种类型的参数。
第一个是强制性:<varName>
。如果由于某种原因,用户在不输入varName
的情况下键入命令,则会运行帮助页面。
第二个是可选:[varName]
。如果用户输入命令,即使缺少varName
,该命令也会运行。
额外:如果您想要无限varName
个变量,那么您可以为想要的选项提供spread operator。成为<...varNames>
或[...varNames]
话虽如此,如果您想提供自定义错误消息,有几种方法可以实现。首先是这一个:
const program = require('yargs')
.command('create [fileName]', 'your description', () => {}, argv => {
if(argv.fileName === undefined) {
console.error('You need to provide name for the new component')
return;
}
console.log(`success, a component called ${argv.fileName} got created.`)
})
Lodash还提供function _.isUndefined也可以使用。
第二个就是这个:
const program = require('yargs')
.command('create <fileName>', 'A description', () => {}, argv => {
}).fail((msg, err, yargs) => {
console.log('Sorry, no component name was given.')
})
program.argv
有关更多信息,请参阅yargs api上的fail documentation。