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 相关文章推荐
深入理解JavaScript系列(7) S.O.L.I.D五大原则之开闭原则OCP
Jan 15 Javascript
js克隆对象、数组的常用方法介绍
Sep 26 Javascript
jQuery实现ichat在线客服插件
Dec 29 Javascript
JavaScript 对象字面量讲解
Jun 06 Javascript
基于jQuery实现多标签页切换的效果(web前端开发)
Jul 24 Javascript
基于JavaScript实现数码时钟效果
Mar 30 Javascript
自适应布局meta标签中viewport、content、width、initial-scale、minimum-scale、maximum-scale总结
Aug 18 Javascript
JavaScript Canvas实现验证码
Aug 02 Javascript
微信小程序—setTimeOut定时器的问题及解决
Jul 26 Javascript
layer弹出层自适应高度,垂直水平居中的实现
Sep 16 Javascript
Egg Vue SSR 服务端渲染数据请求与asyncData
Nov 24 Javascript
详解Webpack抽离第三方类库以及common解决方案
Mar 30 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 操作excel文件的方法小结
2009/12/31 PHP
thinkphp验证码显示不出来的解决方法
2014/03/29 PHP
PHP如何通过表单直接提交大文件详解
2019/01/08 PHP
PHP基础之输出缓冲区基本概念、原理分析
2019/06/19 PHP
php查看一个变量的占用内存的实例代码
2020/03/29 PHP
jquery checkbox实现单选小例
2013/11/27 Javascript
Node.js模拟浏览器文件上传示例
2014/03/26 Javascript
jquery实现个人中心导航菜单效果和美观都非常不错
2014/09/02 Javascript
jQuery拖拽插件gridster使用指南
2015/04/21 Javascript
原生js实现焦点轮播图效果
2017/01/12 Javascript
jquery滚动条插件slimScroll使用方法
2017/02/09 Javascript
React Native 通告消息竖向轮播组件的封装
2020/08/25 Javascript
Bootstrap 树控件使用经验分享(图文解说)
2017/11/06 Javascript
vue实现前进刷新后退不刷新效果
2018/01/26 Javascript
微信小程序Flex布局用法深入浅出分析
2019/04/25 Javascript
ES6 新增的创建数组的方法(小结)
2019/08/01 Javascript
js模拟F11页面全屏显示
2019/09/17 Javascript
ant design vue datepicker日期选择器中文化操作
2020/10/28 Javascript
详解微信小程序轨迹回放实现及遇到的坑
2021/02/02 Javascript
[01:03]PWL开团时刻DAY6——别打我
2020/11/05 DOTA
[01:08:43]DOTA2-DPC中国联赛定级赛 Phoenix vs DLG BO3第一场 1月9日
2021/03/11 DOTA
Numpy数据类型转换astype,dtype的方法
2018/06/09 Python
python3爬虫之设计签名小程序
2018/06/19 Python
pytorch模型存储的2种实现方法
2020/02/14 Python
python实现word文档批量转成自定义格式的excel文档的思路及实例代码
2020/02/21 Python
python搜索算法原理及实例讲解
2020/11/18 Python
OSPREY LONDON官网:英国本土皮具品牌
2019/05/31 全球购物
汽车驾驶求职信
2013/10/25 职场文书
出生医学证明样本
2014/01/17 职场文书
毕业生自荐书
2014/02/02 职场文书
信访工作经验交流材料
2014/05/23 职场文书
员工薪酬激励方案
2014/06/13 职场文书
纪律教育学习心得体会
2014/09/02 职场文书
环保建议书范文
2015/09/14 职场文书
2016年国庆节67周年活动总结
2016/04/01 职场文书
python接口测试返回数据为字典取值方式
2022/02/12 Python