Глубокое погружение в Yargs: создание инструментов командной строки в Node.js
Yargs облегчает создание приложений CLI в Node.js, предлагая мощное решение для анализа аргументов командной строки и повышения удобства использования за счет автоматического документирования и проверки ввода.
Почему Yargs необходим
Yargs выходит за рамки базового анализа аргументов и позволяет автоматизировать справочную документацию и проверять вводимые пользователем данные, что делает инструменты CLI более удобными и надежными.
Первые шаги: установка и базовое использование
Сначала установите Yargs:
npm install yargs
Простой пример парсинга:
const yargs = require('yargs/yargs');
const { hideBin } = require('yargs/helpers');
const argv = yargs(hideBin(process.argv)).parse();
console.log(`Your input was: ${argv._.join(', ')}`);
Чтобы выполнить этот пример, сохраните код в файле, например, parseExample.js
и запустите его с помощью Node.js.
node parseExample.js arg1 arg2 arg3
Определение параметров и флагов
Улучшение нашего сценария для персонализированных поздравлений:
const argv = yargs(hideBin(process.argv))
.option('name', {
alias: 'n',
describe: 'Your name',
type: 'string',
demandOption: true
})
.option('age', {
alias: 'a',
describe: 'Your age',
type: 'number',
demandOption: false
})
.check((argv) => {
if (argv.age !== undefined && argv.age < 18) {
throw new Error("You must be 18 years or older");
}
return true; // Validates the arguments
})
.argv;
console.log(`Hello, ${argv.name}! ${argv.age ? "You're " + argv.age + " years old." : ''}`);
Сохраните это как greet.js
и запустите:
node greet.js --name=Jane --age=30
Сложные приложения CLI с командами
Создаем диспетчер задач:
yargs(hideBin(process.argv))
.command('add <task>', 'Add a new task', (yargs) => {
return yargs.positional('task', {
describe: 'Task description',
type: 'string'
});
}, (argv) => {
console.log(`Adding new task: ${argv.task}`);
})
.command('list', 'List all tasks', () => {
console.log('Listing tasks...');
// Code to list tasks here
})
.demandCommand(1, 'You need at least one command before moving on')
.help()
.argv;
Назовите этот файл taskManager.js
. Добавьте задачу:
node taskManager.js add "Learn Yargs"
Перечислите задачи:
node taskManager.js list
Промежуточное ПО для предварительной обработки аргументов
Реализация промежуточного программного обеспечения для журналирования команд:
yargs(hideBin(process.argv))
.middleware([
(argv) => {
console.log('Running command:', argv._[0]);
}
])
// Define commands and options
.help()
.argv;
Интегрируйте это в инструмент CLI, как приведено выше в taskManager.js
, для регистрации выполненной команды.
Лучшие практики
- Структурированные тексты справки: используйте
.help()
для автоматического создания полезной документации. - Модульность команд: для ясности разбейте свой инструмент на команды и подкоманды.
- Файлы конфигурации: разрешите чтение сложных конфигураций
.config()
из внешних файлов.
Заключение
Yargs неоценим для создания сложных и интуитивно понятных приложений CLI в Node.js. Следуя примерам и применяя эти методы, разработчики могут создавать мощные и удобные инструменты.