Skip to main content

Что здесь происходит: 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 и подкаталогов при старте приложения.