美文网首页
vue实现路由懒加载

vue实现路由懒加载

作者: 简森w | 来源:发表于2020-02-28 16:16 被阅读0次

webpack支持amd、commonJS、es6这三种模块语法,因此vue实现动态路有3种方式:

1. 使用AMD规范的require语法

const routes = [
  {
    path: '/',
    name: 'Home',
    component: Home
  },
  {
    path: '/about',
    name: 'About',
    component: resolve => require(['../views/About.vue'], resolve)
  },
]

这种语法不能指定模块的名称,默认使用webpack配置中output.chunkFileName

2. 使用commonJS规范的require.ensure语法

require.ensure() 是 webpack 特有的,已经被 import() 取代。

const routes = [
  {
    path: '/',
    name: 'Home',
    component: Home
  },
  {
    path: '/about',
    name: 'About',
     component: resolve => require.ensure([], () => resolve(
      require('@/' + about + '.vue')
    ), 'about')
  },
]

此语法和下面的import语法均可以指定模块名称

3. 使用ES6原生的import语法

const routes = [
  {
    path: '/',
    name: 'Home',
    component: Home
  },
  {
    path: '/about',
    name: 'About',
    // route level code-splitting
    // this generates a separate chunk (about.[hash].js) for this route
    // which is lazy-loaded when the route is visited.
    component: () => import(/* webpackChunkName: "about" */ '../views/About.vue')
  },
]

这种是vue-cli3默认使用的方式。

以上三种方式,如果路径参数中都包含变量,webpack打包就会出现问题。

1. import()会将该组件所在的目录内的所有组件都引入进来。

const about = 'views/About'
const routes = [
  {
    path: '/',
    name: 'Home',
    component: Home
  },
  {
    path: '/about',
    name: 'About',
    component: () => import(/* webpackChunkName: "about" */ `../${about}.vue`)
  },
]

这样会将views目录下的所有组件都进行打包,即使没有在路由中没有配置。
因此wbepackChunkName指定的文件名也会有所改变,上面的About页面组件会打包成about1about2类似的名称。
如果后续的路由配置中的路径参数也带有变量,那不管你指定什么webpackChunkName,打包出来的都是按照第一个import指定的webpackChunkName。例如:

const routes = [
  {
    path: '/',
    name: 'Home',
    component: Home
  },
  {
    path: '/about',
    name: 'About',
    component: () => import(/* webpackChunkName: "about" */ `../${about}.vue`) // 打包成about2.js
  },
  {
    path: '/test',
    name: 'Test',
    component: () => import(/* webpackChunkName: "test" */ `../${test}.vue`) // 最终打包成 about3.js 这样的文件名,而不是test.js
  },

2. require()和require.ensure则会将所有带上变量的路由组件打包为一个js

let home = 'views/Home'
let about = 'views/About'
let test = 'views/Test'
const routes = [
  {
    path: '/',
    name: 'Home',
    component: Home
  },
  {
    path: '/about',
    name: 'About',
    component: resolve => require(['../' + about + '.vue'], resolve)
  },
  {
    path: '/test',
    name: 'Test',
    component: resolve => require(['../' + test + '.vue'], resolve)
  },

about页面组件和test页面组件会被打包进同一个js文件。

所以尽量不要在路径参数中带上变量。

相关文章

  • vue路由懒加载及组件懒加载

    路由 和 组件 的常用两种懒加载方式:1、vue异步组件实现路由懒加载component:resolve=>(['...

  • vue中组件懒加载

    vue中组件懒加载的方法 1.异步实现路由懒加载 2.import(推荐使用这种方式) 同理,路由懒加载和组件懒加...

  • vue提升性能的几种简单方法

    1.vue异步组件实现懒加载方法如下:component:resolve=>(require([‘需要加载的路由的...

  • vue路由懒加载

    实现vue路由懒加载的几种方式 [1]const home = r => require.ensure([], (...

  • 复习3

    vue路由懒加载 1.vue路由懒加载解决的什么 问题:解决打包后文件过大的问题,从而优化页面加载,提升性能 注意...

  • 23.路由的懒加载

    路由的懒加载:就是需要的时候在加载 这种写法就能实现路由的懒加载

  • vue实现路由懒加载

    webpack支持amd、commonJS、es6这三种模块语法,因此vue实现动态路有3种方式: 1. 使用AM...

  • vue-cli3 打包优化

    1、设置路由懒加载 importVuefrom'vue'importRouterfrom'vue-router'V...

  • vue路由懒加载和组件懒加载

    vue路由懒加载及组件懒加载 一、为什么要使用路由懒加载 为给客户更好的客户体验,首屏组件加载速度更快一些,解决白...

  • Vue路由懒加载

    VUE路由懒加载及组件懒加载一、为什么要使用路由懒加载为给客户更好的客户体验,首屏组件加载速度更快一些,解决白屏问...

网友评论

      本文标题:vue实现路由懒加载

      本文链接:https://www.haomeiwen.com/subject/vdjxhhtx.html