vue项目实现减少app.js和vender.js的体积操作


Posted in Javascript onNovember 12, 2020

配置webpack中externals来减少打包后vendor.js的体积

在日常的项目开发中,我们会用到各种第三方库来提高效率,但随之带来的问题就是打包后的vendor.js体积过大,导致加载时空白页时间过长,给用户的体验太差。为此我们需要减少vendor.js的体积,从本质上来解决这种问题。

webpack的外部扩展(externals)可以有效的解决。

externals 配置选项提供了「从输出的 bundle 中排除依赖」的方法。相反,所创建的 bundle 依赖于那些存在于用户环境(consumer's environment)中的依赖。防止将某些 import 的包(package)打包到 bundle 中,而是在运行时(runtime)再去从外部获取这些扩展依赖(external dependencies)。

webpack之externals官方参考文档传送门,请戳这里→ externals

下面就以Vue项目为例,介绍一下externals的使用。项目中引用了vue、vue-router、axios、element-ui、qs等第三方库,那么我们的目标就是把这些从输出的 bundle 中排除依赖。

1、在/build/webpack.base.conf.js中,配置externals

// externals中的key是后面需要require的名字,value是第三方库暴露出来的方法名
module.exports = {
 //...
 externals: {
 'vue': 'Vue',
 'vue-router': 'VueRouter',
 'axios': 'axios',
 'element-ui': 'Element',
 'qs': 'Qs'
 }
}

2、在/src/main.js和/src/router/index.js中,移除上面与之相关的import引入,改为require方式引入

// /src/main.js
// 移除
import Vue from 'vue'
import ElementUI from 'element-ui'
import 'element-ui/lib/theme-chalk/index.css'
import axios from 'axios'
import Qs from 'qs'
Vue.use(ElementUI)
// 添加
const Vue = require('vue')
const ElementUI = require('element-ui')
const axios = require('axios')
const Qs = require('qs')
// /src/router/index.js
// 移除
import Router from 'vue-router'
Vue.use(Router)
// 添加
const Router = require('vue-router')

3、在/index.html中,通过CDN引入相应的js文件和css文件(CDN地址:https://www.bootcdn.cn)

.选用unpkg来作为第三方提供.如我想要axios包则输入网址为 https://unpkg.com/axios/ (末尾加斜杠代表你要查询该库的所有版本列表).然后你可以选择对应的版本如https://unpkg.com/axios@0.18.0/index.js 。其中 @0.18.0为库的版本号,若不写则默认最新版本.

<html>
 <head>
 <meta charset="utf-8">
 <meta name="viewport" content="width=device-width,initial-scale=1.0">
 <link href="https://cdn.bootcss.com/element-ui/2.3.8/theme-chalk/index.css" rel="external nofollow" rel="stylesheet">
 <title>配置webpack中externals来减少打包后vendor.js的体积</title>
 </head>
 <body>
 <div id="app"></div>
 <script src="https://cdn.bootcss.com/vue/2.5.15/vue.min.js"></script>
 <script src="https://cdn.bootcss.com/vue-router/3.0.1/vue-router.min.js"></script>
 <script src="https://cdn.bootcss.com/axios/0.18.0/axios.min.js"></script>
 <script src="https://cdn.bootcss.com/element-ui/2.3.8/index.js"></script>
 <script src="https://cdn.bootcss.com/qs/6.5.2/qs.min.js"></script>
 </body>
</html>

4 代码打包成压缩包,浏览器支持自动解压的将会加载压缩包

在config\index.js中进行修改

productionGzip: true,

//需要下载相应的包 npm install --save-dev compression-webpack-plugin

补充知识:Vue打包之后会出现map文件,体积很大

build命令后占体积最大的竟然是.map文件,webpack如何设置不让编译出.map文件呢?

解决办法:去config/index.js中改一个参数:

productionSourceMap:false

把这个改为false。不然在最终打包的文件中会出现一些map文件

map文件的作用:项目打包后,代码都是经过压缩加密的,如果运行时报错,输出的错误信息无法准确得知是哪里的代码报错。

有了map就可以像未加密的代码一样,准确的输出是哪一行哪一列有错。

以上这篇vue项目实现减少app.js和vender.js的体积操作就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
一份老外写的XMLHttpRequest代码多浏览器支持兼容性
Jan 11 Javascript
判断JavaScript对象是否可用的最正确方法分析
Oct 03 Javascript
jquery DOM操作 基于命令改变页面
May 06 Javascript
jquery隔行换色效果实现方法
Jan 15 Javascript
javaScript中Math()函数注意事项
Jun 18 Javascript
javascript学习笔记之函数定义
Jun 25 Javascript
JS使用cookie设置样式的方法
Jun 30 Javascript
JSONP和批量操作功能的实现方法
Aug 21 Javascript
JavaScript浮点数及运算精度调整详解
Oct 21 Javascript
ionic中的$ionicPlatform.ready事件中的通用设置
Jun 11 Javascript
微信小程序实现animation动画
Jan 26 Javascript
JavaScript显式数据类型转换详解
Mar 18 Javascript
详解vue 组件的实现原理
Nov 12 #Javascript
Vant Weapp组件踩坑:picker的初始赋值解决
Nov 12 #Javascript
vue 图片裁剪上传组件的实现
Nov 12 #Javascript
js前端传json后台接收‘‘被转为quot的问题解决
Nov 12 #Javascript
使用Vant完成DatetimePicker 日期的选择器操作
Nov 12 #Javascript
JavaScript 实现拖拽效果组件功能(兼容移动端)
Nov 11 #Javascript
vant 中van-list的用法说明
Nov 11 #Javascript
You might like
php win下Socket方式发邮件类
2009/08/21 PHP
Jquery Ajax学习实例7 Ajax所有过程事件分析示例
2010/03/23 Javascript
js继承的实现代码
2010/08/05 Javascript
JS仿flash上传头像效果实现代码
2011/07/18 Javascript
jquery中通过父级查找进行定位示例
2013/06/28 Javascript
浅谈JS闭包中的循环绑定处理程序
2014/11/09 Javascript
JS+CSS实现弹出全屏灰黑色透明遮罩效果的方法
2014/12/20 Javascript
JavaScript中property和attribute的区别详细介绍
2015/03/03 Javascript
JavaScript实现MIPS乘法模拟的方法
2015/04/17 Javascript
js实现当复选框选择匿名登录时隐藏登录框效果
2015/08/14 Javascript
JS+CSS3实现超炫的散列画廊特效
2016/07/16 Javascript
基于jQuery实现一个marquee无缝滚动的插件
2017/03/09 Javascript
jquery PrintArea 实现票据的套打功能(代码)
2017/03/17 Javascript
说说AngularJS中的$parse和$eval的用法
2017/09/14 Javascript
微信小程序报错:this.setData is not a function的解决办法
2017/09/27 Javascript
详解关于Vuex的action传入多个参数的问题
2019/02/22 Javascript
vue使用nprogress实现进度条
2019/12/09 Javascript
在Python程序中进行文件读取和写入操作的教程
2015/04/28 Python
深入理解python中的atexit模块
2017/03/07 Python
Python制作刷网页流量工具
2017/04/23 Python
python梯度下降法的简单示例
2018/08/31 Python
python: 判断tuple、list、dict是否为空的方法
2018/10/22 Python
利用Python将数值型特征进行离散化操作的方法
2018/11/06 Python
Python3之不使用第三方变量,实现交换两个变量的值
2019/06/26 Python
Django serializer优化类视图的实现示例
2020/07/16 Python
Python 实现简单的客户端认证
2020/07/29 Python
澳大利亚在线时尚精品店:Hello Molly
2018/02/26 全球购物
职业规划书如何设计?
2014/01/09 职场文书
乔迁宴答谢词
2014/01/21 职场文书
干部作风建设心得体会
2014/10/22 职场文书
考博导师推荐信范文
2015/03/27 职场文书
2015年电话销售工作总结范文
2015/04/20 职场文书
2015年度女工工作总结
2015/10/22 职场文书
高中政治教师教学反思
2016/02/23 职场文书
Vue项目打包、合并及压缩优化网页响应速度
2021/07/07 Vue.js
Centos系统通过Docker安装并搭建MongoDB数据库
2022/04/12 MongoDB