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实现文本展开收缩特效
Jun 03 Javascript
javaScript中with函数用法实例分析
Jun 08 Javascript
js文本框走动跑马灯效果代码分享
Aug 25 Javascript
全面介绍javascript实用技巧及单竖杠
Jul 18 Javascript
使用jQuery Ajax 请求webservice来实现更简练的Ajax
Aug 04 Javascript
web 前端常用组件之Layer弹出层组件
Sep 22 Javascript
微信小程序 icon组件详细及实例代码
Oct 25 Javascript
Vue集成Iframe页面的方法示例
Dec 12 Javascript
javascript中的隐式调用
Feb 10 Javascript
jquery简单实现纵向的无缝滚动代码实例
Apr 01 jQuery
基于JavaScript实现控制下拉列表
May 08 Javascript
关于vue的列表图片选中打钩操作
Sep 09 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 curl CURLOPT_RETURNTRANSFER参数的作用使用实例
2015/02/07 PHP
PHP PDO操作MySQL基础教程
2017/06/05 PHP
页面中iframe相互传值传参
2009/12/13 Javascript
jquery.validate使用攻略 第二部
2010/07/01 Javascript
ASP.NET jQuery 实例6 (实现CheckBoxList成员全选或全取消)
2012/01/13 Javascript
Javascript 运动中Offset的bug解决方案
2014/12/24 Javascript
javascript实现去除HTML标签的方法
2016/12/26 Javascript
ES6中Math对象的部分扩展
2017/02/20 Javascript
Angularjs 实现动态添加控件功能
2017/05/25 Javascript
JavaScrpt判断一个数是否是质数的实例代码
2017/06/11 Javascript
Angular4 中常用的指令入门总结
2017/06/12 Javascript
Node.js利用js-xlsx处理Excel文件的方法详解
2017/07/05 Javascript
Vue学习笔记进阶篇之vue-router安装及使用方法
2017/07/19 Javascript
vue实现点击选中,其他的不选中方法
2018/09/05 Javascript
JavaScript实现的联动菜单特效示例
2019/07/08 Javascript
node 标准输入流和输出流代码实例
2019/09/19 Javascript
JavaScript实现页面高亮操作提示和蒙板
2021/01/04 Javascript
python使用多线程不断刷新网页的方法
2015/03/31 Python
Python创建模块及模块导入的方法
2015/05/27 Python
点球小游戏python脚本
2018/05/22 Python
Python使用tkinter模块实现推箱子游戏
2019/10/08 Python
python 中的[:-1]和[::-1]的具体使用
2020/02/13 Python
HTML5 video 事件应用示例
2014/09/11 HTML / CSS
BrandAlley英国:法国折扣奢侈品网上零售商
2017/07/03 全球购物
解释一下钝化(Swap out)
2016/12/26 面试题
校长先进事迹材料
2014/02/01 职场文书
护士见习期自我鉴定
2014/02/08 职场文书
《梅兰芳学艺》教学反思
2014/02/24 职场文书
行政秘书工作自我鉴定
2014/09/15 职场文书
工作批评与自我批评范文
2014/10/16 职场文书
青年志愿者服务活动总结
2015/05/06 职场文书
抢劫罪辩护词
2015/05/21 职场文书
企业反腐倡廉心得体会
2015/08/15 职场文书
nginx如何将http访问的网站改成https访问
2021/03/31 Servers
Python-OpenCV实现图像缺陷检测的实例
2021/06/11 Python
python垃圾回收机制原理分析
2022/04/13 Python