Single-SPA — это фреймворк для микрофронтендов, позволяющий объединять приложения на разных технологиях в единую страницу. Vue.js отлично подходит для такой архитектуры благодаря своей модульности и реактивной системе. Интеграция Vue с Single-SPA требует понимания жизненного цикла приложений и особенностей работы Vue в микроархитектуре.
Для начала необходимо установить базовые зависимости:
npm install vue@next vue-router@4 single-spa single-spa-vue
vue@next — актуальная версия Vue 3.vue-router@4 — современный маршрутизатор Vue.single-spa — ядро для микрофронтендов.single-spa-vue — адаптер для интеграции Vue приложений
в Single-SPA.Структура проекта может быть следующей:
/micro-vue-app
├─ src/
│ ├─ main.js
│ ├─ App.vue
│ └─ components/
├─ package.json
└─ index.html
single-spa-vueСоздается точка входа main.js:
import { h, createApp } from 'vue';
import singleSpaVue from 'single-spa-vue';
import App from './App.vue';
import router from './router';
const vueLifecycles = singleSpaVue({
createApp,
appOptions: {
render: () => h(App),
router,
},
});
export const bootstrap = vueLifecycles.bootstrap;
export const mount = vueLifecycles.mount;
export const unmount = vueLifecycles.unmount;
Пояснение:
createApp — стандартная функция Vue для инициализации
приложения.appOptions.render — функция рендера, передающая
корневой компонент App.router — если используется маршрутизация, необходимо
передать объект Vue Router.bootstrap, mount и
unmount соответствуют жизненному циклу микрофронтенда
Single-SPA.Single-SPA разделяет жизненный цикл приложения на три стадии:
В контексте Vue эти стадии управляются адаптером
single-spa-vue. Например, метод unmount
уничтожает экземпляр Vue и удаляет слушатели событий, предотвращая
утечки памяти при переходе между микрофронтендами.
Маршрутизатор Vue создается обычным способом:
import { createRouter, createWebHistory } from 'vue-router';
import Home from './components/Home.vue';
import About from './components/About.vue';
const router = createRouter({
history: createWebHistory(),
routes: [
{ path: '/', component: Home },
{ path: '/about', component: About },
],
});
export default router;
При использовании Single-SPA рекомендуется:
createWebHistory() для изоляции истории
приложения.Для снижения размера микрофронтенда применяется ленивый импорт компонентов:
const Home = () => import('./components/Home.vue');
const About = () => import('./components/About.vue');
Это позволяет загружать код только при необходимости, снижая нагрузку на основной бандл страницы.
Single-SPA предоставляет глобальное событие customEvent
для коммуникации между микрофронтендами. В Vue можно подписаться на эти
события через жизненный цикл компонентов:
mounted() {
window.addEventListener('global-event', this.handleEvent);
},
beforeUnmount() {
window.removeEventListener('global-event', this.handleEvent);
},
methods: {
handleEvent(event) {
console.log('Получено событие:', event.detail);
}
}
Single-SPA позволяет размещать приложение Vue в любом DOM-элементе.
Для этого используется свойство domElementGetter:
const vueLifecycles = singleSpaVue({
createApp,
appOptions: {
render: () => h(App),
router,
},
domElementGetter: () => document.getElementById('vue-root'),
});
domElementGetter возвращает DOM-элемент, в который
будет монтироваться Vue-приложение.defineAsyncComponent для ленивой загрузки
тяжелых компонентов.window.