在vue-cli+vue-router+webpack基础上简单修改配置实现根据路由实现代码切割和懒加载

key words : vue-cli vue-router webpack

在vue-cli+vue-router+webpack基础上简单修改配置实现根据路由实现代码切割和懒加载


vue-cli让我们能快速构建一个大型单页面web应用,帮我们一键配置了路由和状态管理,热加载,打包webpack配置都一应俱全。下面讲解修改几个地方来实现根据路由切割代码并实现懒加载。

懒加载的必要性和实现原理

大型单页面应用往往代码量庞大,打包后的js文件大小高大几M甚至十几M,从输入网址到页面显现需要加载几M的文件并解析运行,用户等待时间较长,造成不好的用户体验。实际上,页面的首次显示并不需要加载所有的组件代码,甚至有些组件从用户打开网址到关闭网页都不会使用到,那么按某种方式将代码切割并按需加载就能大幅提高加载速度,改善用户体验。单页面的路由是页面状态的主要表征,自然想到按路由来切割代码。

Quick Start

Install dependencies to init project:

    git clone git@github.com:limianhust/vue-vue-router-webpack.git
    
    
    Start local server to launch project:
    
    cd YourProjectName
    npm run build
    npm run start

打包编译后可以看到dist目录下:

    |--dist
       |--static
       |  |--css
       |     |--app.[hash].css
       |     |--app.[hash].css.map
       |  |--js
       |     |--app.[hash].js
       |     |--app.[hash].js.map
       |     |--mainifest.[hash].js
       |     |--mainifest.[hash].js.map
       |     |--vendor.[hash].js
       |     |--vendor.[hash].js.map
       |--index.html

所以组件代码集中在 app.js 里,依赖库集中在 vendor.js 里。下面修改配置

1. 首先修改webpack配置,找到webpack.base.conf.js文件,

增加一行代码

output: {
path: path.resolve(__dirname, '../dist'),
filename: '[name].js'
},
变成:
output: {
path: path.resolve(__dirname, '../dist'),
filename: '[name].js',
chunkFilename: '[name].bundle.js'
},

然后到router文件夹里找到index.js文件,要切割的组件引入写法:

import Hello from '@/components/Hello'
import topSide from '@/components/topSide'

改成

const Hello = () => import('@/components/Hello')
const topSide = () => import('@/components/topSide')

然后打包,我们就会发现js文件多了两个 0.[hash].js和1.[hash].js文件,
这就是切割出来的代码。只要用户继续操作进入相应的路由,这两个文件才会请求加载。

    |--dist
       |--static
       |  |--css
       |     |--app.[hash].css
       |     |--app.[hash].css.map
       |  |--js
       |     |--0.[hash].js
       |     |--0.[hash].js.map
       |     |--1.[hash].js
       |     |--1.[hash].js.map
       |     |--app.[hash].js
       |     |--app.[hash].js.map
       |     |--mainifest.[hash].js
       |     |--mainifest.[hash].js.map
       |     |--vendor.[hash].js
       |     |--vendor.[hash].js.map
       |--index.html 
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 1 Webpack 1.1 概念简介 1.1.1 WebPack是什么 1、一个打包工具 2、一个模块加载工具 3...
    Kevin_Junbaozi阅读 11,779评论 0 16
  • 生活琐事最恼人 越闲就越嫌
    佩玖呀阅读 1,495评论 0 0
  • 祝大家早安,美丽的一天又开始啦! 大家好! 这是一年前我生日时朋友送的胡姖花(中国好像叫兰花)依然开的灿烂,让我看...
    珊屏阅读 1,769评论 2 0
  • step1:[初察] 记录自己这一刻的情绪体验 因为刚经历一场自己举办的活动,之前以为很简单,没做太多准备,结果活...
    xenaxrose阅读 1,301评论 2 1
  • 做事三分钟热度的我,对你好像也是一样,得不到回应的喜欢我也懂得了适可而止,慢慢变得收敛。十二,蓝先森,还有最后的十...
    十一与女阅读 1,216评论 0 0

友情链接更多精彩内容