如何在 yargs 中构建众多命令之一?
How to structure one of many commands in yargs?
我已多次阅读 yargs 文档,但无法理解这一点。这是我的要求:
- 我的 CLI 应该提供两个命令:
cmd1
和 cmd2
。
- 用户必须指定这两个命令之一,否则 CLI 必须打印一条帮助消息并退出。
这是我的尝试:
async function main() {
await yargs(process.argv.slice(2))
.command('cmd1', 'Command 1', {}, () => console.log('Executing command1'))
.command('cmd2', 'Command 2', {}, () => console.log('Executing command2'))
.help().argv;
}
以下命令按预期工作:
my-cli cmd1 # prints "Executing command1"
my-cli cmd2 # prints "Executing command2"
但是以下命令静默退出:
my-cli
my-cli cmd3
我错过了什么?
根据文档和OP的提炼,正确的yarg
处理未定义参数的代码如下:
async function main() {
await yargs(process.argv.slice(2))
.command('cmd1', 'Command 1', {}, () => console.log('Executing command1'))
.command('cmd2', 'Command 2', {}, () => console.log('Executing command2'))
.strictCommands()
.demandCommand()
.help().argv;
}
strictCommands()
:只接受已定义的命令(即不接受未定义的命令,如cmd3
)Documentation
demandCommand()
:接受最少 1 个参数(即不接受没有参数的命令); 1为默认最小值;也可以通过 demandCommand(1, 1)
Documentation
添加 max
选项来约束恰好 1 个参数
我已多次阅读 yargs 文档,但无法理解这一点。这是我的要求:
- 我的 CLI 应该提供两个命令:
cmd1
和cmd2
。 - 用户必须指定这两个命令之一,否则 CLI 必须打印一条帮助消息并退出。
这是我的尝试:
async function main() {
await yargs(process.argv.slice(2))
.command('cmd1', 'Command 1', {}, () => console.log('Executing command1'))
.command('cmd2', 'Command 2', {}, () => console.log('Executing command2'))
.help().argv;
}
以下命令按预期工作:
my-cli cmd1 # prints "Executing command1"
my-cli cmd2 # prints "Executing command2"
但是以下命令静默退出:
my-cli
my-cli cmd3
我错过了什么?
根据文档和OP的提炼,正确的yarg
处理未定义参数的代码如下:
async function main() {
await yargs(process.argv.slice(2))
.command('cmd1', 'Command 1', {}, () => console.log('Executing command1'))
.command('cmd2', 'Command 2', {}, () => console.log('Executing command2'))
.strictCommands()
.demandCommand()
.help().argv;
}
strictCommands()
:只接受已定义的命令(即不接受未定义的命令,如cmd3
)Documentation
添加demandCommand()
:接受最少 1 个参数(即不接受没有参数的命令); 1为默认最小值;也可以通过demandCommand(1, 1)
Documentationmax
选项来约束恰好 1 个参数