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


Posted in Javascript onJune 13, 2017

使用 vue-cli构建的项目,在 默认情况下 ,执行 npm run build  会将所有的js代码打包为一个整体,

打包位置是 dist/static/js/app.[contenthash].js  

类似下面的路由代码

router/index.js  路由相关信息,该路由文件引入了多个 .vue组件

import Hello from '@/components/Hello'
import Province from '@/components/Province'
import Segment from '@/components/Segment'
import User from '@/components/User'
import Loading from '@/components/Loading'

执行 npm run build 会打包为一个整体 app.[contenthash].js ,这个文件是非常大,可能几兆或者几十兆,加载会很慢

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

所以我们需要分模块打包,把我们想要组合在一起的组件打包到一个 chunk块中去

分模块打包需要下面这样使用 webpack的 require.ensure,并且在最后加入一个 chunk名,

相同 chunk名字的模块将会打包到一起

router/index.js 修改为懒加载组件

const Province = r => require.ensure([], () => r(require('@/components/Province.vue')), 'chunkname1')
const Segment = r => require.ensure([], () => r(require('@/components/Segment.vue')), 'chunkname1')
const Loading = r => require.ensure([], () => r(require('@/components/Loading.vue')), 'chunkname3')
const User = r => require.ensure([], () => r(require('@/components/User.vue')), 'chunkname3')

根据 chunkame的不同, 上面的四个组件, 将会被分成3个块打包,最终打包之后与组件相关的js文件会分为3个 (除了app.js,manifest.js, vendor.js)

分模块打包之后在 dist目录下是这样的, 这样就把一个大的 js文件分为一个个小的js文件了,按需去下载,其他的使用方法和import的效果一样

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

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
JavaScript 学习笔记二 字符串拼接
Mar 28 Javascript
利用location.hash实现跨域iframe自适应
May 04 Javascript
Json字符串转换为JS对象的高效方法实例
May 01 Javascript
JavaScript实现窗口抖动效果
Oct 19 Javascript
jQuery validate插件功能与用法详解
Dec 15 Javascript
详解vue-cli 脚手架项目-package.json
Jul 04 Javascript
详解AngularJS跨页面传值(ui-router)
Aug 23 Javascript
webpack+vue-cil中proxyTable处理跨域的方法
Jul 20 Javascript
Vue中的$set的使用实例代码
Oct 08 Javascript
微信小程序封装的HTTP请求示例【附升级版】
May 11 Javascript
Vue实现导航栏的显示开关控制
Nov 01 Javascript
js 函数性能比较方法
Aug 24 Javascript
javascript checkbox/radio onchange不能兼容ie8处理办法
Jun 13 #Javascript
angularjs之$timeout指令详解
Jun 13 #Javascript
JS实现json的序列化和反序列化功能示例
Jun 13 #Javascript
angularjs实现搜索的关键字在正文中高亮出来
Jun 13 #Javascript
angular-ngSanitize模块-$sanitize服务详解
Jun 13 #Javascript
让微信小程序支持ES6中Promise特性的方法详解
Jun 13 #Javascript
jQueryeasyui 中如何使用datetimebox 取两个日期间相隔的天数
Jun 13 #jQuery
You might like
多文件上载系统完整版
2006/10/09 PHP
dedecms中显示数字验证码的修改方法
2007/03/21 PHP
批量修改RAR文件注释的php代码
2010/11/20 PHP
php addslashes及其他清除空格的方法是不安全的
2012/01/25 PHP
php单例模式实现(对象只被创建一次)
2012/12/05 PHP
PHP开发框架laravel安装与配置教程
2015/03/13 PHP
php实现中文转数字
2016/02/18 PHP
MAC下通过改apache配置文件切换php多版本的方法
2017/04/26 PHP
微信公众平台开发教程②微信端分享功能图文详解
2019/04/10 PHP
JQuery事件e参数的方法preventDefault()取消默认行为
2013/09/26 Javascript
开发中可能会用到的jQuery小技巧
2014/03/07 Javascript
JavaScript实现点击文字切换登录窗口的方法
2015/05/11 Javascript
JSON字符串转JSON对象
2015/07/31 Javascript
jQuery实现可以控制图片旋转角度效果(附demo源码下载)
2016/01/27 Javascript
jQuery联动日历的实例解析
2016/12/02 Javascript
AngularJS获取json数据的方法详解
2017/05/27 Javascript
vue组件中iview的modal组件爬坑问题之modal的显示与否应该是使用v-show
2019/04/12 Javascript
vue服务端渲染操作简单入门实例分析
2019/08/28 Javascript
JS中比Switch...Case更优雅的多条件判断写法
2019/09/05 Javascript
vue 使用微信jssdk,调用微信相册上传图片功能
2020/11/13 Javascript
[01:45]2014DOTA2 TI预选赛预选赛 战前探营!
2014/05/21 DOTA
Django实现自定义404,500页面教程
2017/03/26 Python
python 打印直角三角形,等边三角形,菱形,正方形的代码
2017/11/21 Python
Python实现的端口扫描功能示例
2018/04/08 Python
Python分割指定页数的pdf文件方法
2018/10/26 Python
python 用opencv调用训练好的模型进行识别的方法
2018/12/07 Python
win7上tensorflow2.2.0安装成功 引用DLL load failed时找不到指定模块 tensorflow has no attribute xxx 解决方法
2020/05/20 Python
html5的新玩法——语音搜索
2013/01/03 HTML / CSS
美国时尚在线:Showpo
2017/09/08 全球购物
彪马英国官网:PUMA英国
2019/02/11 全球购物
外语学院毕业生的自我鉴定
2013/11/28 职场文书
2015年副班长工作总结
2015/05/15 职场文书
高中生军训感言
2015/08/01 职场文书
原生JS中应该禁止出现的写法
2021/05/05 Javascript
python基础之文件处理知识总结
2021/05/23 Python
【海涛解说】pis亲自推荐,其实你从来不会玩NW
2022/04/01 DOTA