Vue router lazy loading not working or creating separate chunk files

Viewed 335

I'm trying to implement some lazy loading on my routes but not being successful. This is how my index.js files on my router folder looks likes

import Vue from "vue";
import VueRouter from "vue-router";
import Home from "../views/Home.vue";
import Login from "../views/Login";
import Register from "../views/Register";
import ResetPw from "../views/ResetPw";
import firebase from "firebase/app";

Vue.use(VueRouter);

const routes = [
    {
        path: "/",
        name: "home",
        component: Home,
        meta: {
            requiresAuth: true
        }
    },
    {
        path: "/login",
        name: "login",
        component: Login,
    },
    {
        path: "/register",
        name: "register",
        component: Register,
    },
    {
        path: "/resetpw",
        name: "resetpw",
        component: ResetPw,
    },
    {
        path: "/member",
        name: "memberlist",
        // component: Memberlist,
        component: () => import('../views/MemberList.vue'),
        meta: {
            requiresAuth: true
        }
    },
    {
        path: "/removed",
        name: "removedlog",
        // component: RemovedLog,
        component: () => import('../views/RemovedLog.vue'),
        meta: {
            requiresAuth: true
        }
    },
    {
        path: "/log",
        name: "pointlog",
        // component: PointLog,
        component: () => import('../views/PointLog.vue'),
        meta: {
            requiresAuth: true
        }
    },
    {
        path: "/:name",
        name: "member",
        // component: Member,
        component: () => import('../views/Member.vue'),
        meta: {
            requiresAuth: true
        }
    },
    {
        path: "/edit/:name",
        name: "edit",
        // component: EditPlayer,
        component: () => import('../views/EditPlayer.vue'),
        meta: {
            requiresAuth: true
        }
    },
    {
        path: "/delete/:name",
        name: "delete",
        // component: DeletePlayer,
        component: () => import('../views/DeletePlayer.vue'),
        meta: {
            requiresAuth: true
        }
    },
    {
        path: "/editremoved/:name",
        name: "editremoved",
        // component: EditRemoved,
        component: () => import('../views/EditRemoved.vue'),
        meta: {
            requiresAuth: true
        }
    }
];

const router = new VueRouter({
    mode: "history",
    base: process.env.BASE_URL,
    routes
});

router.beforeEach((to, from, next) => {
    const requiresAuth = to.matched.some(record => record.meta.requiresAuth);
    const isAuthenticated = firebase.auth().currentUser;
    if (requiresAuth && !isAuthenticated) {
        next("/login");
    } else {
        next();
    }
});

export default router;

I'm not sure what I'm doing wrong or what I'm missing, this is how the oficial vue-router documentation says to implement the lazy loading https://router.vuejs.org/guide/advanced/lazy-loading.html and also how many tutorials explain how to implement lazy loading.

When I do a build, it only creates 1 .js file when it is supposed to build one for each route and using the network tab on firefox, when moving between routes no new route .js file is loaded, I only have an app.js

1 Answers

It could be that you're forgetting the webpackChunkName comment. To achieve that you need to use named chunks by providing a chunk name using a special comment syntax. Here's an example:

{
   path: '/dashboard',
   name: 'dashboard',
   component: () =>
      import(
         /* webpackChunkName: "Dashboard" */ './components/Dashboard.vue'
      ),
   meta: {
      title: 'Dashboard'
   }
},
Related