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 相关文章推荐
JS面向对象、prototype、call()、apply()
May 14 Javascript
加载jQuery后$冲突的解决办法
Jul 09 Javascript
jQuery语法总结和注意事项小结
Nov 11 Javascript
js 限制数字 js限制输入实现代码
Dec 04 Javascript
js setTimeout 常见问题小结
Aug 13 Javascript
浅析webapp框架AngularUI的demo
Dec 21 Javascript
JavaScript中的类数组对象介绍
Dec 30 Javascript
JS自动倒计时30秒后按钮才可用(两种场景)
Aug 31 Javascript
JS及PHP代码编写八大排序算法
Jul 12 Javascript
小程序实现五星点评效果
Nov 03 Javascript
jQuery控制input只能输入数字和两位小数的方法
May 16 jQuery
微信小程序基于ColorUI构建皮皮虾短视频去水印组件
Nov 04 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
zf框架的Filter过滤器使用示例
2014/03/13 PHP
thinkphp3.0输出重复两次的解决方法
2014/12/19 PHP
PHP使用ffmpeg给视频增加字幕显示的方法
2015/03/12 PHP
PHP序列化操作方法分析
2016/09/28 PHP
php中bind_param()函数用法分析
2017/03/28 PHP
理清PHP在Linxu下执行时的文件权限方法
2017/06/07 PHP
原生js实现改变随意改变div属性style的名称和值的结果
2013/09/26 Javascript
实例详解Nodejs 保存 payload 发送过来的文件
2016/01/14 NodeJs
Angular.js与Bootstrap相结合实现手风琴菜单代码
2016/04/13 Javascript
利用Angularjs和bootstrap实现购物车功能
2016/08/31 Javascript
基于JavaScript实现前端文件的断点续传
2016/10/17 Javascript
简单谈谈Javascript函数中的arguments
2017/02/09 Javascript
微信小程序wx:for和wx:for-item的用法详解
2018/04/01 Javascript
JS实现获取进今年第几天是周几的方法分析
2018/06/27 Javascript
微信小程序自定义弹窗wcPop插件
2018/11/19 Javascript
Vue常用的全选/反选的示例代码
2020/02/19 Javascript
[05:15]DOTA2英雄梦之声_第16期_灰烬之灵
2014/06/21 DOTA
python统计日志ip访问数的方法
2015/07/06 Python
使用简单工厂模式来进行Python的设计模式编程
2016/03/01 Python
利用python实现简单的循环购物车功能示例代码
2017/07/05 Python
selenium+python自动化测试之页面元素定位
2019/01/23 Python
python实现获取单向链表倒数第k个结点的值示例
2019/10/24 Python
pycharm设置默认的UTF-8编码模式的方法详解
2020/06/01 Python
Python实现文件压缩和解压的示例代码
2020/08/12 Python
J2EE包括哪些技术
2016/11/25 面试题
大学毕业生简单自荐信
2013/11/05 职场文书
小学生通知书评语
2014/12/31 职场文书
大二学年个人总结
2015/03/03 职场文书
简历自我评价模板
2015/03/11 职场文书
重阳节座谈会主持词
2015/07/03 职场文书
2016秋季运动会开幕词
2016/03/04 职场文书
导游词之河北邯郸
2019/09/12 职场文书
导游词之晋城蟒河
2019/12/12 职场文书
react中props 的使用及进行限制的方法
2021/04/28 Javascript
MySQL kill不掉线程的原因
2021/05/07 MySQL
Go本地测试解耦任务拆解及沟通详解Go本地测试的思路沟通的重要性总结
2022/06/21 Golang