Это решение, которое я сейчас использую.Хотя я ищу лучшее решение. Команда
require('yargs')
.usage('Usage: $0 <cmd> [options]')
.command(
'read',
'Read a note',
yargs =>
yargs
.option('id', {
string: true
})
.option('first', {
boolean: true
})
.check(({ id, first }) => {
if (!id.trim() && !first) {
throw new Error('id or first option is required');
}
return true
}),
argv => {
if (argv.first) {
note.readFirst().then(data => {
console.log('==================note read==================');
console.log(data);
console.log('==================note read==================');
});
} else {
note.read(argv.id).then(data => {
console.log('==================note read==================');
console.log(data);
console.log('==================note read==================');
});
}
}
)
.help()
.strict().argv;
yargs принимает 4 варианта.Команда, описание, строитель и обработчик.Строитель может быть объектом или функцией.Использование функции может использоваться для предоставления расширенной справки для конкретной команды.
Также я удалил запрос на оба из них, так как при использовании запроса он будет запрашивать оба варианта, но мне нужен был только один.
Также при настройкеОпция для строки или логического значения того, что он делает, приводит только к тому типу, который не проверяет тип.Так что здесь, если никакая опция не предоставлена argv.first
значение по умолчанию будет false
& argv.id
значение по умолчанию будет ''
пустая строка.
Также при вызове функции Ошибка из проверки фактически отображается сообщение об ошибкеобъекта Error, но если мы вернем false, он отобразит тело функции в консоли в виде сообщения, помогающего отследить ошибку.
Также без доступа к argv
yargs не будет анализироваться.
см. https://yargs.js.org/docs/#api-commandcmd-desc-builder-handler, https://yargs.js.org/docs/#api-argv.