Vue项目总结之webpack常规打包优化方案


Posted in Javascript onJune 06, 2019

由于新建项目发版打包时间大概需要 30分钟 ,发版时 严重 拖慢 下班 时间,所以特意查看了相关文档来优化打包速度,争取早点下班,^_^。

分析打包文件

要优化,先分析。我们先要知道到底是哪里拖慢我们的打包速度呢?

打包后生成文件分析

可以利用 webpack-bundle-analyzer 插件来分析我们打包后生成的文件

安装

npm i webpack-bundle-analyzer -D

使用

修改 webpack.prod.conf.js 文件

const BundleAnalyzerPlugin = require('webpack-bundle-analyzer').BundleAnalyzerPlugin

// 构建完成后,浏览器会自动打开localhost:8080
webpackConfig.plugins.push(
 new BundleAnalyzerPlugin({
  analyzerPort: 8080,
  generateStatsFile: false
 })
)

Vue项目总结之webpack常规打包优化方案

通过图片可以看到打包后文件的具体信息

打包进度条显示,可以查看到打包进度百分比

simple-progress-webpack-plugin 可以显示打包百分比

安装

npm i simple-progress-webpack-plugin -D

使用

修改 webpack.prod.conf.js 文件

const SimpleProgressWebpackPlugin = require( 'simple-progress-webpack-plugin' )
...
 plugins: [
  new SimpleProgressWebpackPlugin()
 ]
...

效果如下:

 Vue项目总结之webpack常规打包优化方案

资源与依赖包的控制

通过上面进度可以看到,打包过程中,卡顿在压缩的地方过长,当项目越来越臃肿的时候,我们要需要对项目静态资源以及依赖包进行整理,

图片过大的可以压缩,这里推荐一个还不错的压缩 链接

  • 项目中没有使用的依赖可以删除,可以按需引用的依赖,按需引用
  • 项目里面使用 ElementUI 和 Echarts 都是全部引用挂在 Vue.prototype 上,现都改为按需引用。

减少文件搜索范围

设置 resolve.alias 字段,避免打包时如果使用相对路径访问或着 import 文件时会层层去查找解析文件

resolve: {
 alias: {
  '@': resolve('src')
 }
}

合理配置 extensions 扩展名

resolve.extensions 能够自动解析确定的扩展,但是如果 extensions 扩展名过多,会导致解析过程过多,所以我们要合理配置扩展名,不要过多配置扩展名,项目引用多的文件,扩展名放在前面,我司项目中多的是 vue , js 文件,可以只引用这两种。

resolve: {
 extensions: ['.vue', '.js']
}

loader 预处理文件增加 include 匹配特定条件

预处理各种文件时指定匹配目录后, webpack 解析文件时就不会循环查找其他目录,加快解析速度。

happypack 多线程执行

webpack 执行预处理文件时单线程的,我们可以使用 happypack 来多线程处理文件。

安装

npm i happypack  -D

使用

修改 webpack.base.js 文件

const happyThreadPool = HappyPack.ThreadPool({ size: os.cpus().length });
module: {
 rules: [
  {
   test: /\.js$/,
   loader: 'happypack/loader?id=babel', // 原始loader替换成`happypack/loader`
   include: [resolve('src')]
  }
 ]
},
plugins: [
 new HappyPack({
  // id标识 需要处理的loader
  id: 'babel',
  // loader配置和原始配置一样
  loaders: [
   {
    loader: 'babel-loader',
    options: {
     presets: ['es2015'],
     cacheDirectory: true
    }
   }
  ],
  threadPool: happyThreadPool
 })
]

babel-plugin-dynamic-import-node 异步加载

babel-plugin-dynamic-import-node 插件是使 import() 替换成 require 编译

安装

npm i babel-plugin-dynamic-import-node -D

使用

修改 .babelrc 文件

"env": {
 "development": {
  "plugins": ["dynamic-import-node"]
 },
 "production": {
  "plugins": ["dynamic-import-node"]
 }
}

注意:使用插件 build 后没有 chunk files 文件。

总结

项目经过以上优化,打包从 30 分钟,到 2 分钟,整体还有优化空间,可以使用其他 cdn , dll 等优化方式。

以上所述是小编给大家介绍的Vue项目总结之webpack常规打包优化方案,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

Javascript 相关文章推荐
js 图片随机不定向浮动的实现代码
Jul 02 Javascript
jquery js 重置表单 reset()具体实现代码
Aug 05 Javascript
js禁止页面使用右键(简单示例代码)
Nov 13 Javascript
jquery解决客户端跨域访问问题
Jan 06 Javascript
js实现单击图片放大图片的方法
Feb 17 Javascript
小议JavaScript中Generator和Iterator的使用
Jul 29 Javascript
基于jquery实现表格内容筛选功能实例解析
May 09 Javascript
vue开发调试神器vue-devtools使用详解
Jul 13 Javascript
jQuery Validate格式验证功能实例代码(包括重名验证)
Jul 18 jQuery
Vuex中mutations与actions的区别详解
Mar 01 Javascript
node.js环境搭建图文详解
Sep 19 Javascript
layui 点击重置按钮, select 并没有被重置的解决方法
Sep 03 Javascript
vue-cli脚手架打包静态资源请求出错的原因与解决
Jun 06 #Javascript
详解vue-cli@2.x项目迁移日志
Jun 06 #Javascript
详解新手使用vue-router传参时注意事项
Jun 06 #Javascript
vue-cli配置全局sass、less变量的方法
Jun 06 #Javascript
解决vue组件props传值对象获取不到的问题
Jun 06 #Javascript
webpack4之如何编写loader的方法步骤
Jun 06 #Javascript
vue 插件的方法代码详解
Jun 06 #Javascript
You might like
JSON用法之将PHP数组转JS数组,JS如何接收PHP数组
2015/10/08 PHP
php preg_match的匹配不同国家语言实例
2016/12/29 PHP
PHP实现的简单适配器模式示例
2017/06/22 PHP
用javascript实现读取txt文档的脚本
2007/07/20 Javascript
$.format,jquery.format 使用说明
2011/07/13 Javascript
关于jQuery $.isNumeric vs. $.isNaN vs. isNaN
2013/04/15 Javascript
javascript适合移动端的日期时间拾取器
2015/11/10 Javascript
整理Javascript数组学习笔记
2015/11/29 Javascript
js实现新年倒计时效果
2015/12/10 Javascript
js实现炫酷的左右轮播图
2017/01/18 Javascript
提高JavaScript执行效率的23个实用技巧
2017/03/01 Javascript
整理一些最近经常遇到的前端面试题
2017/04/25 Javascript
详解webpack+vue-cli项目打包技巧
2017/06/17 Javascript
create-react-app 修改为多入口编译的方法
2018/08/01 Javascript
微信小程序上线发布流程图文详解
2019/05/06 Javascript
12个提高JavaScript技能的概念(小结)
2019/05/09 Javascript
layui 实现table翻页滚动条位置保持不变的例子
2019/09/05 Javascript
Vue设置长时间未操作登录自动到期返回登录页
2020/01/22 Javascript
AI小程序之语音听写来了,十分钟掌握百度大脑语音听写全攻略
2020/03/13 Javascript
JavaScript中数组去重的5种方法
2020/07/04 Javascript
PyQt5每天必学之关闭窗口
2018/04/19 Python
Python使用jsonpath-rw模块处理Json对象操作示例
2018/07/31 Python
Python实现在线批量美颜功能过程解析
2020/06/10 Python
Python 使用Opencv实现目标检测与识别的示例代码
2020/09/08 Python
如何完美的建立一个python项目
2020/10/09 Python
python 对一幅灰度图像进行直方图均衡化
2020/10/27 Python
介绍一下SQL注入攻击的种类和防范手段
2012/02/18 面试题
广州盈通面试题
2015/12/05 面试题
编写一个类体现构造,公有,私有方法,静态,私有变量
2013/08/10 面试题
北体毕业生求职信
2014/02/28 职场文书
感谢信模板大全
2015/01/23 职场文书
项目战略合作意向书
2015/05/08 职场文书
导游词之云南省玉龙雪山
2019/12/19 职场文书
Pygame如何使用精灵和碰撞检测
2021/11/17 Python
90后经典动画片排行:《数码宝贝》第二,《小鲤鱼历险记》在榜
2022/03/18 日漫
MySQL运行报错:“Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggre”解决方法
2022/06/14 MySQL