线上打包动态路由报错问题

来源:11-9 章节总结

河畔一角

2021-11-23

课程在第十一章第七节课讲解了动态路由,但是我们发现本地可以正常运行,但是打包部署到线上后报错,这是什么原因,如何解决?

写回答

1回答

河畔一角

提问者

2021-11-23


课程原本的方式:

在router/index.js中,通过`loadAsyncRoutes`加载动态路由

```js

async function loadAsyncRoutes() {

    let userInfo = storage.getItem('userInfo') || {}

    if (userInfo.token) {

        try {

            const { menuList } = await API.getPermissionList()

            let routes = utils.generateRoute(menuList)

            routes.map(route => {

                let url = `./../views/${route.component}.vue`

                route.component = () => import(url);

                router.addRoute("home", route);

            })

        } catch (error) {


        }

    }

}

```

改正后方案:

```js

async function loadAsyncRoutes() {

    let userInfo = storage.getItem('userInfo') || {}

    if (userInfo.token) {

        try {

            const { menuList } = await API.getPermissionList()

            let routes = utils.generateRoute(menuList)

            const modules = import.meta.glob('../views/*.vue')

            console.log('views',modules)

            routes.map(route => {

                let url = `../views/${route.name}.vue`

                route.component = modules[url];

                router.addRoute("home", route);

            })

        } catch (error) {


        }

    }

}

```


由于通过impor(url)的方式,程序不能识别出来哪些文件需要打包构建,因此导致views下面的vue文件都没有打包进去,线上无法访问。


通过import.meta.glob可以读取本地文件,打包构建时会全部进行按需编译,modules对应是一个Object对象,key为路径,value为()=>import()函数,因此这种方式再线上才能正常运转。


0
0

Vue3+ElementPlus+Koa2 全栈开发后台系统

从前端晋级到全栈,让你的未来发展有更多可能

1069 学习 · 580 问题

查看课程