vue项目按需加载

2019-09-27  本文已影响0人  崔某猿

原理:利用webpack对代码进行分割是懒加载的前提,懒加载就是异步调用组件,需要时候才下载。


1、vue异步组件技术

vue-router配置路由,使用vue的异步组件技术,可以实现按需加载。
但是,这种情况下一个组件生成一个js文件。

{
    path: '/promisedemo',
    name: 'PromiseDemo',
    component: resolve => require(['../components/PromiseDemo'], resolve)
}
2、es的import()

需要webpack > 2.4

需要安装syntax-dynamic-import 插件

(1)使用webpack中的syntax-dynamic-import 插件

npm install --save-dev babel-plugin-syntax-dynamic-import

(2)配置.babelrc文件(若没有,则新建这个文件,和package.json同级)

{

    "plugins": ["syntax-dynamic-import"]

}

(3)Vue-route提供语法:

// 下面2行代码,没有指定webpackChunkName,每个组件打包成一个js文件。
const ImportFuncDemo1 = () => import('../components/ImportFuncDemo1')
const ImportFuncDemo2 = () => import('../components/ImportFuncDemo2')
// 下面2行代码,指定了相同的webpackChunkName,会合并打包成一个js文件。
// const ImportFuncDemo = () => import(/* webpackChunkName: 'ImportFuncDemo' */ '../components/ImportFuncDemo')
// const ImportFuncDemo2 = () => import(/* webpackChunkName: 'ImportFuncDemo' */ '../components/ImportFuncDemo2')
webpack提供的require.ensure()

vue-router配置路由,使用webpack的require.ensure技术,也可以实现按需加载。
这种情况下,多个路由指定相同的chunkName,会合并打包成一个js文件。

{
  path: '/promisedemo',
  name: 'PromiseDemo',
  component: r => require.ensure([], () => r(require('../components/PromiseDemo')), 'demo')
},
{
  path: '/hello',
  name: 'Hello',
  component: r => require.ensure([], () => r(require('../components/Hello')), 'demo')
}

本人学识有限 文章多有不足

若有错误 请大方指出 以免误导他人

上一篇下一篇

猜你喜欢

热点阅读