Nuxt 3 Starter Kit построен на принципах модульной архитектуры с четким разделением ответственности. Проект следует лучшим практикам Vue 3 и Nuxt 3 для создания масштабируемых приложений.
Конфигурация приложения Nuxt 3
router.options.ts- Настройки роутинга
Статические ресурсы и стили
/css/global.css- Глобальные CSS стили/scss/components/- SCSS стили для компонентов
Vue компоненты, организованные по категориям
/ui - Базовые UI компоненты
AppButton.vue- Кнопки с различными типами и размерамиAppDialog.vue- Модальные окнаAppDropdown.vue- Выпадающие менюAppIcon.vue- Иконки
/form - Компоненты для работы с формами
AppForm.vue- Основной компонент формыAppFormInputText.vue- Текстовые поляAppFormInputPassword.vue- Поля паролейAppFormSelect.vue- СелектыAppFormMultiSelect.vue- Множественный выборAppFormFile.vue- Загрузка файловAppFormTextarea.vue- Многострочные поляFormField.vue- Обертка для полей формыFormContainer.vue- Контейнер формы
/client - Клиентские компоненты
AppLoader.vue- Индикаторы загрузки
Composable функции для переиспользования логики
api.ts- Функции для работы с API
Макеты страниц
default.vue- Основной макетauth.vue- Макет для страниц аутентификации
Страницы приложения (автоматическая маршрутизация Nuxt)
/auth/- Страницы аутентификации/login/- Вход в систему/register/- Регистрация
Pinia stores для управления состоянием
auth.ts- Store для аутентификацииmain.ts- Основной store
TypeScript типы и интерфейсы
api.ts- Типы для APIauth.ts- Типы аутентификацииform.ts- Типы формhelpers.ts- Вспомогательные типыrouter.ts- Типы роутинга
Утилитарные функции
helpers.ts- Общие вспомогательные функции
- Каждый компонент имеет единственную ответственность
- Компоненты переиспользуемы и типизированы
- Четкое разделение между UI и бизнес-логикой
- Все компоненты и функции типизированы
- Строгая типизация для API и форм
- Автодополнение и проверка типов
- Логика вынесена в composable функции
- Переиспользование кода между компонентами
- Легкое тестирование
- Централизованное управление состоянием
- Типизированные stores
- Реактивность и devtools
- Декларативное описание форм
- Встроенная валидация
- Типизированные поля
{
"nuxt": "^3.13.0",
"vue": "latest",
"primevue": "^4.0.7",
"pinia": "^2.2.2",
"firebase": "^10.13.2"
}{
"typescript": "latest",
"tailwindcss": "^3.4.12",
"autoprefixer": "^10.4.20"
}- Загрузка конфигурации Nuxt
- Инициализация PrimeVue с темой Aura
- Подключение Tailwind CSS
- Регистрация глобальных компонентов
- Проверка токена в localStorage
- Валидация токена через API
- Загрузка данных пользователя
- Обновление состояния в store
- Автоматическая генерация маршрутов из
/pages - Middleware для проверки аутентификации
- Layout switching в зависимости от маршрута
Используется в формах для создания компонентов полей:
const getFieldComponent = (type: FormFieldType) => {
switch (type) {
case FormFieldType.TEXT:
return AppFormInputText;
// ...
}
};Реализован через Vue 3 reactivity и Pinia stores:
watch(accessToken, (newToken) => {
isAuthenticated.value = !!newToken;
});Используется для валидации форм:
const validationRules = {
[ValidationRuleType.REQUIRED]: (value: any) => !!value || 'Required',
[ValidationRuleType.EMAIL]: (value: string) => /\S+@\S+\.\S+/.test(value) || 'Invalid email',
};- JWT токены для аутентификации
- Автоматическое обновление токенов
- Защищенные маршруты
- Клиентская валидация форм
- Серверная валидация API
- Санитизация данных
- Легкое добавление новых компонентов
- Расширение типов и интерфейсов
- Подключение новых stores
- Ленивая загрузка компонентов
- Оптимизация изображений
- Кэширование API запросов
tests/
├── unit/
│ ├── components/
│ ├── composables/
│ └── stores/
├── integration/
└── e2e/
- Vitest для unit тестов
- Vue Test Utils для тестирования компонентов
- Playwright для e2e тестов
- JSDoc комментарии для всех компонентов
- Примеры использования
- Описание props и events
- Типизированные интерфейсы
- Описание endpoints
- Примеры запросов
Эта архитектура обеспечивает гибкость, масштабируемость и поддерживаемость кода, следуя современным стандартам разработки Vue 3 приложений.