Что здесь происходит: const dynamicRouteFiles = import.meta.glob('./modules/**/*.ts', { eager: true, });
Разберём построчно
const dynamicRouteFiles = import.meta.glob(
'./modules/**/*.ts',
{ eager: true }
)
Что это такое в целом
Это Vite-фича (не чистый JS и не Vue), которая:
🔍 находит все
.tsфайлы в папкеmodulesи импортирует их
Подробно
1️⃣ import.meta.glob(...)
Это специальная функция Vite:
-
ищет файлы по glob-шаблону
-
возвращает объект с импортами
import.meta.glob('./modules/**/*.ts')
означает:
-
папка
modules -
любые вложенные папки
** -
все файлы
.ts
📁 Пример структуры:
modules/
auth.ts
admin/users.ts
admin/roles.ts
2️⃣ Что вернёт import.meta.glob
Без eager:
{
'./modules/auth.ts': () => import('./modules/auth.ts'),
'./modules/admin/users.ts': () => import('./modules/admin/users.ts'),
}
⚠️ Файлы не загружаются сразу, а лениво.
3️⃣ { eager: true }
{ eager: true }
означает:
📦 импортировать файлы сразу при запуске
Теперь результат будет:
{
'./modules/auth.ts': { default: ... },
'./modules/admin/users.ts': { default: ... },
}
То есть:
-
все
.tsфайлы выполняются сразу -
ты сразу получаешь их содержимое
Зачем это обычно используют
🔹 Динамическая регистрация
Чаще всего:
-
роутов
-
Pinia stores
-
модулей
-
middleware
Пример с роутами:
const routes = []
Object.values(dynamicRouteFiles).forEach((module: any) => {
routes.push(...module.default)
})
Каждый файл:
// modules/admin.ts
export default [
{ path: '/admin', component: Admin }
]
Почему так делают
✔ Не нужно вручную импортировать каждый файл
✔ Просто добавил файл — он автоматически подключился
✔ Удобно для больших проектов
Важно помнить ⚠️
-
Это работает только в Vite (Vue 3, Nuxt 3)
-
{ eager: true }увеличивает начальный бандл -
Без
eager— ленивая загрузка
Коротко
Эта строка автоматически импортирует все
.tsфайлы изmodulesи подкаталогов при старте приложения.
No comments to display
No comments to display