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 相关文章推荐
基于JQuery框架的AJAX实例代码
Nov 03 Javascript
50个比较实用jQuery代码段
Sep 18 Javascript
javascript学习笔记(十九) 节点的操作实现代码
Jun 20 Javascript
javascript中有趣的反柯里化深入分析
Dec 05 Javascript
JS匀速运动演示示例代码
Nov 26 Javascript
js动态创建及移除div的方法
Jun 03 Javascript
java必学必会之static关键字
Dec 03 Javascript
Jquery插件easyUi实现表单验证示例
Dec 15 Javascript
ES6新特性二:Iterator(遍历器)和for-of循环详解
Apr 20 Javascript
AngularJS 支付倒计时功能实现思路
Jun 05 Javascript
5分钟打造简易高效的webpack常用配置
Jul 04 Javascript
vue中slot(插槽)的介绍与使用
Nov 12 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
动态网站web开发 PHP、ASP还是ASP.NET
2006/10/09 PHP
学习php笔记 字符串处理
2010/10/19 PHP
php禁止某ip或ip地址段访问的方法
2015/02/25 PHP
php实现支付宝当面付(扫码支付)功能
2018/05/30 PHP
js href的用法
2010/05/13 Javascript
jquery实现图片渐变切换兼容ie6/Chrome/Firefox
2013/08/02 Javascript
javascript 数字格式化输出的实现代码
2013/12/10 Javascript
js 弹出新页面避免被浏览器、ad拦截的一种新方法
2014/04/30 Javascript
浅谈重写window对象的方法
2014/12/29 Javascript
PHP+MySQL+jQuery随意拖动层并即时保存拖动位置实例讲解
2015/10/09 Javascript
JavaScript File API实现文件上传预览
2016/02/02 Javascript
js本地图片预览实现代码
2016/10/09 Javascript
javascript ASCII和Hex互转的实现方法
2016/12/27 Javascript
JavaScript数据结构之链表的实现
2017/03/19 Javascript
利用node.js本地搭建HTTP服务器
2017/04/19 Javascript
vue.js中过滤器的使用教程
2017/06/08 Javascript
浅谈vue-lazyload实现的详细过程
2017/08/22 Javascript
用vue写一个仿简书的轮播图的示例代码
2018/03/13 Javascript
[05:41]2014DOTA2西雅图国际邀请赛 小组赛7月10日TOPPLAY
2014/07/10 DOTA
Python实现获取网站PR及百度权重
2015/01/21 Python
Python实现的简单模板引擎功能示例
2017/09/02 Python
python实现单向链表详解
2018/02/08 Python
更新pip3与pyttsx3文字语音转换的实现方法
2019/08/08 Python
python实现单链表的方法示例
2019/09/03 Python
树莓派4B+opencv4+python 打开摄像头的实现方法
2019/10/18 Python
Django 构建模板form表单的两种方法
2020/06/14 Python
HTML5未来发展趋势
2016/02/01 HTML / CSS
DJI全球:DJI Global
2021/03/15 全球购物
进修护士自我鉴定
2013/10/14 职场文书
信访工作经验交流材料
2014/05/23 职场文书
简易离婚协议书范本
2014/10/24 职场文书
2015年教师党员个人总结
2015/11/24 职场文书
温馨祝福晨语:美丽的一天从我的问候开始
2019/11/28 职场文书
MongoDB 常用的crud操作语句
2021/06/20 MongoDB
Window server中安装Redis的超详细教程
2021/11/17 Redis
python库Tsmoothie模块数据平滑化异常点抓取
2022/06/10 Python