Vite Plugin for Vue Router Layouts

0.11.0 · active · verified Sun Apr 19

vite-plugin-vue-layouts is a Vite plugin designed to simplify the implementation of router-based layouts in Vue 3 applications. It is currently at version 0.11.0 and is actively maintained, with regular updates and fixes. The plugin works by transforming Vue Router configurations, effectively wrapping page components within specified layout components as nested routes. It integrates seamlessly with `vite-plugin-pages` and `unplugin-vue-router`, allowing developers to define layouts for individual pages using route blocks (e.g., `<route lang="yaml"> meta: { layout: 'my-layout' } </route>`). Layout components, typically stored in `src/layouts`, are automatically discovered and asynchronously imported, providing a structured approach to managing application layouts.

Common errors

Warnings

Install

Imports

Quickstart

Demonstrates basic setup, integrating the plugin with Vite, Vue, and Vue Router to enable router-based layouts using `vite-plugin-pages`.

import { defineConfig } from 'vite';
import Vue from '@vitejs/plugin-vue';
import Pages from 'vite-plugin-pages'; // Recommended companion plugin
import Layouts from 'vite-plugin-vue-layouts';

export default defineConfig({
  plugins: [
    Vue(),
    Pages(), // Optional, but commonly used with this plugin
    Layouts({
      layoutsDirs: 'src/layouts',
      defaultLayout: 'default'
    })
  ]
});

// src/main.ts
import { createApp } from 'vue';
import { createRouter, createWebHistory } from 'vue-router';
import { setupLayouts } from 'virtual:generated-layouts';
import generatedRoutes from '~pages'; // From vite-plugin-pages
import App from './App.vue';

// Transform generated routes with layouts
const routes = setupLayouts(generatedRoutes);

const router = createRouter({
  history: createWebHistory(),
  routes,
});

createApp(App).use(router).mount('#app');

view raw JSON →