路由的默认 vue-cli 延迟加载代码在定义为 lambda 时不起作用

Posted

技术标签:

【中文标题】路由的默认 vue-cli 延迟加载代码在定义为 lambda 时不起作用【英文标题】:Default vue-cli lazy load code for route does not work when defined as lambda 【发布时间】:2020-11-10 04:14:52 【问题描述】:

我使用 vue-cli 搭建了一个新的 Typescript 项目,并指定它应该包含 vue-router

这会自动生成一个router/index.ts,其路由器配置如下所示:

const routes: Array<RouteConfig> = [
  
    path: '/',
    name: 'Home',
    component: Home,
 ,
  
    path: '/about',
    name: 'About',
    component: () =>  import(/* webpackChunkName: "about" */ '../views/About.vue') ,
  
]

这个文件编译得很好,正如人们所期望的那样。但是,当我尝试使用 &lt;router-link&gt; 调用路由时,关于页面不会呈现。我可以确认路由正在被调用,因为如果我在上面的导入 lambda 中添加 console.log('x'),我会在控制台中看到“x”,但从不调用 About 组件构造函数,并且不会呈现 About 内容。

但是,如果我将index.ts 调整如下(根据docs),则路线可以正常工作并显示视图:

const AboutRoute = () => import('../views/About.vue')

const routes: Array<RouteConfig> = [
  
    path: '/',
    name: 'Home',
    component: Home,
 ,
  
    path: '/about',
    name: 'About',
    component: AboutRoute,
  
]

谁能解释为什么第二个版本有效,但不是第一个,因为它们似乎与我相同。

谢谢 伊恩

【问题讨论】:

这能回答你的问题吗? Curly Brackets in Arrow Functions 【参考方案1】:

您的第一个解决方案不起作用,因为它没有返回导入。

在Javscript中,当你在函数中添加括号 时,它不会自动返回结果,你需要自己添加return这个词。所以要么不加括号,要么加return

方法一:

component: () => 
  return import(
    /* webpackChunkName: "about" */ 
    '../views/About.vue'
  )


方法二:

component: () => import(
  /* webpackChunkName: "about" */ 
  '../views/About.vue'
)

【讨论】:

以上是关于路由的默认 vue-cli 延迟加载代码在定义为 lambda 时不起作用的主要内容,如果未能解决你的问题,请参考以下文章

延迟加载模块中的 Angular single-spa 延迟加载路由调用未定义的 webpack 错误

如何在加载延迟加载的路由组件时显示“加载”动画?

vue按需加载组件-webpack require.ensure

Vue-cli-4-路由配置文件,路由进阶,二级路由

React自定义组件之懒加载-LazyLoad。

vue项目优化之按需加载组件-使用webpack require.ensure