Перейти к основному содержимому
Версия: 0.4

Vue Router

к сведению

Для использования vue-router в проекте с @lite-ssr/vue, не требуется устанавливать отдельный rendererPlugin, так как @lite-ssr/vue из коробки проверяет наличие vue-router и автоматически настраивает серверную сторону без прямой зависимости от vue-router.

Установка

Для начала необходимо установить vue-router:

pnpm i vue-router

Настройка роутера

При создании роутера нужно учитывать, что для SSR используется история на основе memoryHistory, а для браузера — webHistory.

Создание роутера

import { createRouter, createWebHistory, createMemoryHistory } from 'vue-router'

const baseUrl = import.meta.env.BASE_URL
const history = import.meta.env.SSR ? createMemoryHistory(baseUrl) : createWebHistory(baseUrl)

const routes = [
{
path: '/',
name: 'home',
component: () => import('@/pages/Home.vue')
}
]

const router = createRouter({
history,
routes
})

export default router
warning

На стороне сервера используется memoryHistory, на клиенте — webHistory. Это обязательное условие для корректной работы SSR.

Подключение роутера в приложение

После того как роутер создан, подключите его к приложению в вашем entry файле.

import { createApp } from '@lite-ssr/vue'
import App from './App.vue'
import router from './router'

const app = createApp(App)
app.use(router)

app.mount('#app')

export default app

Асинхронная загрузка роутов

Если вы хотите загружать маршруты асинхронно, например, из внешнего API, можно использовать асинхронную регистрацию приложения. Это позволяет загрузить маршруты только когда они реально понадобятся.

Асинхронное создание роутера

import { createRouter, createWebHistory, createMemoryHistory } from 'vue-router'

const baseUrl = import.meta.env.BASE_URL
const history = import.meta.env.SSR ? createMemoryHistory(baseUrl) : createWebHistory(baseUrl)

export async function getRouter() {
const routes = await getSomeAsyncRoutes() // Метод, который возвращает маршруты асинхронно
return createRouter({
history,
routes
})
}

Использование асинхронного роутера в entry файле

В вашем entry файле используйте асинхронную регистрацию приложения:

import { createApp, defineAsyncApp } from '@lite-ssr/vue'
import App from './App.vue'
import { getRouter } from './router'

export default defineAsyncApp(async () => {
const app = createApp(App)
const router = await getRouter()
app.use(router)
app.mount('#app')
return app
})

Заключение

Благодаря архитектуре Lite SSR, регистрация роутов может быть асинхронной, что позволяет динамически загружать маршруты, например, из внешнего API. Это решение работает не только в разработке, но и на production-сервере, в отличие от других реализаций SSR, где обычно требуется заранее определять все маршруты. Это дает гибкость в создании более масштабируемых приложений, где маршруты могут быть подгружены в рантайме.