Quasar предоставляет строгую и удобную организацию файловой структуры, что облегчает масштабирование приложений. Основные директории включают:
/src — основной каталог исходного
кода, содержащий компоненты, страницы, роуты и сервисы./components — переиспользуемые
Vue-компоненты. Важно создавать отдельные подкаталоги для логически
связанных компонентов (например, forms,
layout, widgets)./layouts — компоненты макета
приложения, определяющие общую структуру страниц (header, sidebar,
footer). Рекомендуется использовать один основной макет и несколько
альтернативных при необходимости./pages — страницы приложения, каждая
страница обычно представлена отдельным Vue-компонентом. Для удобства
навигации можно структурировать страницы по поддиректориям./store — состояние приложения,
управляемое Vuex. Разделение на модули рекомендуется для крупных
приложений, что позволяет изолировать логику каждого функционального
блока./boot — инициализация сторонних
библиотек, плагинов и глобальных настроек. Каждая точка загрузки
(boot file) выполняется до монтирования приложения./router — маршрутизация, где
определяются маршруты и их компоненты, включая lazy loading для
оптимизации производительности.Компоненты должны быть чистыми и автономными, с минимальными зависимостями друг от друга. Принципы разделения:
<style scoped>, а
глобальные переменные и миксины хранить в отдельной директории
/css или /styles.Маршруты создаются через Vue Router, интегрированный в Quasar. Для оптимизации загрузки больших приложений применяются динамические импорты:
const routes = [
{
path: '/',
component: () => import('pages/IndexPage.vue')
},
{
path: '/about',
component: () => import('pages/AboutPage.vue')
}
]
Lazy loading позволяет разделять код на чанки, что снижает время первоначальной загрузки и ускоряет отклик приложения.
Использование Vuex в Quasar требует модульной структуры:
// store/user.js
export default {
state: () => ({
profile: null,
isLoggedIn: false
}),
mutations: {
setProfile(state, profile) {
state.profile = profile
state.isLoggedIn = !!profile
}
},
actions: {
fetchProfile({ commit }) {
// асинхронный запрос
}
},
getters: {
isAuthenticated: state => state.isLoggedIn
}
}
Основной store/index.js подключает модули:
import { store } from 'quasar/wrappers'
import { createStore } from 'vuex'
import user from './user'
export default store(() => {
const Store = createStore({
modules: { user },
strict: process.env.DEBUGGING
})
return Store
})
Boot-файлы отвечают за инициализацию сторонних библиотек и глобальных объектов. Пример использования Axios:
import { boot } from 'quasar/wrappers'
import axios from 'axios'
export default boot(({ app }) => {
app.config.globalProperties.$axios = axios.create({
baseURL: 'https://api.example.com'
})
})
Каждый boot-файл выполняется перед монтированием приложения, что гарантирует доступность плагина во всех компонентах.
Для переиспользуемой логики можно создавать миксины или утилитарные функции:
// src/mixins/formMixin.js
export default {
methods: {
validateField(field, rules) {
// проверка поля
}
}
}
Их подключение происходит локально или глобально через boot-файл.
Quasar поддерживает SCSS и CSS-переменные:
src/css/quasar.variables.scss<style scoped lang="scss">Для крупных проектов важно четко разделять:
/services) — работа с
API, бизнес-логика./components) — отображение
данных, вызов сервисов через actions Vuex./pages) — сборка компонентов
и организация пользовательского интерфейса.Quasar интегрируется с ESLint, Prettier и TypeScript. Настройка строгих правил кода гарантирует единообразие:
Эти практики повышают читаемость и упрощают командную разработку.