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 相关文章推荐
在Z-Blog中运行代码[html][/html](纯JS版)
Mar 25 Javascript
javascript,jquery闭包概念分析
Jun 19 Javascript
Ext JS 4官方文档之三 -- 类体系概述与实践
Dec 16 Javascript
jquery实现图片渐变切换兼容ie6/Chrome/Firefox
Aug 02 Javascript
js清除input中type等于file的值域(示例代码)
Dec 24 Javascript
Jquery getJSON方法详细分析
Dec 26 Javascript
利用js实现在浏览器状态栏显示访问者在本页停留的时间
Dec 29 Javascript
js实现网页右上角滑出会自动消失大幅广告的方法
Feb 27 Javascript
CSS中position属性之fixed实现div居中
Dec 14 Javascript
Vue3.0数据响应式原理详解
Oct 09 Javascript
深入理解webpack process.env.NODE_ENV配置
Feb 23 Javascript
vuex存取值和映射函数使用说明
Jul 24 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
模仿OSO的论坛(二)
2006/10/09 PHP
Adodb的十个实例(清晰版)
2006/12/31 PHP
php中将字符串转为HTML的实体引用的一个类
2013/02/03 PHP
Function eregi is deprecated (解决方法)
2013/06/21 PHP
QQ互联一键登录审核不通过的解决方案
2014/09/10 PHP
WordPress中Gravatar头像缓存到本地及相关优化的技巧
2015/12/19 PHP
jQuery 页面载入进度条实现代码
2009/02/08 Javascript
javascript中数组的多种定义方法和常用函数简介
2014/05/09 Javascript
JS随机洗牌算法之数组随机排序
2016/03/23 Javascript
javascript HTML5 canvas实现打砖块游戏
2020/06/18 Javascript
[原创]JS基于FileSaver.js插件实现文件保存功能示例
2016/12/08 Javascript
vue实现点击追加选中样式效果
2019/11/01 Javascript
vue keep-alive列表页缓存 详情页返回上一页不刷新,定位到之前位置
2019/11/26 Javascript
微信小程序修改数组长度的问题的解决
2019/12/17 Javascript
Vue 解决在element中使用$notify在提示信息中换行问题
2020/11/11 Javascript
Python变量和字符串详解
2017/04/29 Python
python实现决策树ID3算法的示例代码
2018/05/30 Python
Python绘图实现显示中文
2019/12/04 Python
Python+unittest+requests 接口自动化测试框架搭建教程
2020/10/09 Python
Html5移动端网页端适配(js+rem)
2021/02/03 HTML / CSS
澳大利亚百货公司:David Jones
2018/02/08 全球购物
澳大利亚优质的家居用品和生活方式公司:Bed Bath N’ Table
2019/04/16 全球购物
Nike俄罗斯官方网站:Nike RU
2021/03/05 全球购物
MySQL面试题
2014/01/12 面试题
违反工作纪律检讨书
2014/02/15 职场文书
现场施工员岗位职责
2014/03/10 职场文书
幼儿园三八妇女节活动方案
2014/03/11 职场文书
英文演讲稿开场白
2014/08/25 职场文书
2014年党员自我评议对照检查材料
2014/09/20 职场文书
支部书记四风问题自我剖析材料
2014/09/29 职场文书
2015年元宵节活动总结
2015/02/06 职场文书
2015年护士节活动总结
2015/02/10 职场文书
经典搞笑版检讨书
2015/02/19 职场文书
Win Server2016远程桌面如何允许多用户同时登录
2022/06/10 Servers
windows server 2016 域环境搭建的方法步骤(图文)
2022/06/25 Servers
Java实现字符串转为驼峰格式的方法详解
2022/07/07 Java/Android