В Quasar framework boot файлы используются для инициализации и настройки сторонних библиотек, глобальных объектов, плагинов и API при запуске приложения. Каждый boot файл представляет собой модуль JavaScript или TypeScript, который выполняется до создания корневого Vue-компонента, что позволяет гарантировать доступность необходимых ресурсов во всех компонентах приложения.
Boot файлы размещаются в папке src/boot и подключаются
через массив boot в конфигурации Quasar
(quasar.config.js). Они могут экспортировать функции и
объекты, которые затем становятся доступными через глобальный контекст
приложения.
// Пример простого boot файла: src/boot/axios.js
import { boot } from 'quasar/wrappers'
import axios from 'axios'
export default boot(({ app, router, store }) => {
// Создание глобального экземпляра axios
const api = axios.create({
baseURL: 'https://api.example.com',
timeout: 5000
})
// Добавление в глобальный контекст Vue
app.config.globalProperties.$api = api
})
Boot файлы подключаются через массив boot в
quasar.config.js:
boot: [
'axios',
'auth',
'notifications'
]
Каждая строка соответствует имени файла в src/boot без
расширения. Quasar автоматически обрабатывает эти файлы и гарантирует их
последовательное выполнение в порядке перечисления.
Boot файлы удобны для настройки:
axios, fetch,
GraphQL clients)// src/boot/api.js
import { boot } from 'quasar/wrappers'
import axios from 'axios'
export default boot(({ app, store }) => {
const api = axios.create({
baseURL: 'https://api.example.com',
})
// Интерсептор для добавления токена авторизации
api.interceptors.request.use(config => {
const token = store.state.auth.token
if (token) {
config.headers.Authorization = `Bearer ${token}`
}
return config
})
app.config.globalProperties.$api = api
})
Теперь любой компонент может использовать $api:
export default {
async mounted() {
const response = await this.$api.get('/users')
console.log(response.data)
}
}
Boot файлы могут быть асинхронными, если необходимо выполнить подготовку API перед рендерингом приложения. Для этого достаточно вернуть промис из функции boot:
export default boot(async ({ app, store }) => {
const token = await fetchTokenFromStorage()
const api = axios.create({ baseURL: 'https://api.example.com' })
api.interceptors.request.use(config => {
if (token) config.headers.Authorization = `Bearer ${token}`
return config
})
app.config.globalProperties.$api = api
})
Quasar выполняет boot файлы строго в порядке их перечисления в конфигурации. Это критично, если один boot файл зависит от ресурсов другого:
boot: [
'auth', // создаёт store.state.auth.token
'api' // использует token для настройки axios
]
Попытка поменять порядок может привести к ошибкам, если API инициализируется до того, как токен станет доступен.
Boot файлы идеально подходят для интеграции сторонних плагинов:
import { boot } from 'quasar/wrappers'
import VueToast from 'vue-toast-notification'
import 'vue-toast-notification/dist/theme-sugar.css'
export default boot(({ app }) => {
app.use(VueToast)
})
После этого компоненты могут вызывать методы плагина глобально через
this.$toast.
window или
document до монтирования, так как boot файлы могут
выполняться на сервере (SSR) или в тестовой среде, где этих объектов
нет.app.config.globalProperties или
provide/inject для передачи API по всему
приложению, избегая глобальных переменных.Boot файлы в Quasar — мощный инструмент для создания единой точки настройки API, управления токенами, интерсепторами и глобальными клиентами HTTP. Они обеспечивают строгий порядок инициализации и позволяют безопасно подключать сторонние библиотеки, гарантируя их доступность в любом компоненте Vue.
Это позволяет строить масштабируемую архитектуру приложения, где все API-интеграции централизованы и легко управляемы через единый механизм boot файлов.