Quasar Framework предоставляет мощные возможности для расширения стандартного CLI через создание собственных команд. Эти команды позволяют автоматизировать задачи, интегрировать сторонние инструменты и оптимизировать процесс разработки.
Каждая пользовательская команда CLI представляет собой отдельный
модуль, расположенный в папке проекта src/commands или в
директории, указанной в конфигурации Quasar CLI. Основные элементы
команды:
Структура файла команды обычно выглядит так:
module.exports = function (/* ctx */) {
return {
name: 'my-command',
description: 'Пример пользовательской команды',
options: {
'--example': 'Описание опции example'
},
handler (args, api) {
// Реализация команды
}
}
}
args — объект, содержащий значения переданных
параметров.api — объект с методами Quasar CLI для взаимодействия с
проектом, генерации файлов, выполнения скриптов и др.Для того чтобы CLI распознавал новую команду, необходимо
зарегистрировать её в конфигурации Quasar. Это делается через экспорт
массива команд в quasar.extensions.json или подключение
через quasar.conf.js. Пример подключения команды через
конфигурационный файл:
// quasar.conf.js
module.exports = function (/* ctx */) {
return {
extendCli (cli) {
cli.registerCommand(require('./src/commands/my-command'))
}
}
}
После регистрации команда становится доступной через терминал как:
quasar my-command --example
Quasar CLI поддерживает две категории параметров:
--prod или
-p.Пример обработки флагов и аргументов:
handler (args) {
if (args['--prod']) {
console.log('Сборка для продакшена включена')
}
const name = args._[0] // первый позиционный аргумент
console.log(`Имя объекта: ${name}`)
}
Ключевой момент: все позиционные аргументы Quasar CLI помещает в
массив args._.
API Quasar CLI предоставляет набор утилит, доступных в объекте
api, таких как:
api.prompts — интерактивные запросы к пользователю
(списки, подтверждения, ввод текста).api.resolve — получение абсолютных путей к файлам
проекта.api.addFile — генерация новых файлов или перезапись
существующих.api.runScript — запуск внешних скриптов или
npm-команд.Пример использования интерактивного запроса:
async handler (args, api) {
const response = await api.prompts({
type: 'input',
name: 'componentName',
message: 'Введите имя нового компонента'
})
console.log(`Создаем компонент с именем: ${response.componentName}`)
}
Частая задача пользовательских команд — автоматическое создание
шаблонов компонентов или страниц. Используется метод
api.addFile:
api.addFile({
filename: `src/components/${componentName}.vue`,
content: `<template>\n <div>${componentName}</div>\n</template>\n<script>\nexport default {\n name: '${componentName}'\n}\n</script>`
})
Особенности:
filename — путь к создаваемому файлу относительно корня
проекта.content — текстовое содержимое файла.api.addFile автоматически создаст директории, если они
отсутствуют.Quasar CLI рекомендует использовать console.log,
console.error и console.warn для вывода
информации и ошибок. Для критических ошибок можно выбросить
исключение:
if (!componentName) {
throw new Error('Имя компонента обязательно')
}
Все современные команды CLI должны поддерживать асинхронные операции.
Хендлер может быть async и использовать await
для работы с файловой системой или внешними API.
async handler (args, api) {
const data = await fetchSomeData()
await api.addFile({ filename: 'data.json', content: JSON.stringify(data) })
}
Эта структура позволяет создавать мощные расширения CLI, интегрированные с проектом, упрощает автоматизацию процессов и снижает вероятность ошибок при ручной работе с проектом.