首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Vue Router似乎不喜欢函数调用

Vue Router似乎不喜欢函数调用
EN

Stack Overflow用户
提问于 2021-05-18 20:58:01
回答 2查看 39关注 0票数 0

在我的router/index.js中,我正在尝试延迟加载路由。如果我对字符串进行硬编码,它是有效的,但是如果我使用函数调用(如图所示)将文件路径作为字符串值,它会在console - Error: Cannot find module '../views/Login/Login.vue'中显示一个错误。我使用的是Vue 2.6.11和Vue-router 3.5.1。

我哪里错了?

代码语言:javascript
复制
import Vue from 'vue'
import VueRouter from 'vue-router'

Vue.use(VueRouter)

// const filePath = (filename, foldername) => '../views/' + foldername + "/" + filename + '.vue'


const routes = [
    {
        path: '/',
        name: 'Login',

        // THIS WORKS
        component: () => import('../views/Login/Login.vue')

        // THIS DOES NOT, EVEN THOUGH IT IS GETTING THE EXACT SAME VALUE
        // component: () => import(filePath('Login', 'Login'))
    },
]

const router = new VueRouter({
    routes
})

export default router
EN

回答 2

Stack Overflow用户

发布于 2021-05-18 21:02:58

如果你想延迟加载一条路由,它必须是可静态分析的,如下所示:

代码语言:javascript
复制
component: () => import('../views/Login/Login.vue')

在您的其他尝试中:

代码语言:javascript
复制
component: () => import(filePath('Login', 'Login'))

导入不能由构建工具(可能是webpack)静态分析。构建工具负责识别正在使用的代码和未使用的代码(这称为树摇动)。由于它不能解析实际的导入(只有在运行时才有可能,因为filePath可以返回任何内容),所以它认为vue文件从未被引用过,应该从构建中删除。

如果你的实际构建工具是webpack,你必须遵循这里描述的webpack的说明:https://webpack.js.org/api/module-methods/#dynamic-expressions-in-import,它指出当动态导入具有可静态分析的模式(例如:模板文字)时,动态导入是可能的。

票数 2
EN

Stack Overflow用户

发布于 2021-05-18 21:03:03

您应该让webpack知道它将在哪个根文件夹中加载组件文件,因此您应该将../views/移到导入参数,而不是您函数的返回值:

代码语言:javascript
复制
const filePath = (filename, foldername) => foldername + "/" + filename + '.vue'


const routes = [
    {
        path: '/',
        name: 'Login',
        component: () => import('.../views/'+filePath('Login', 'Login'))
    },
]
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67586673

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档