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 相关文章推荐
JavaScript Date对象使用总结
May 14 Javascript
JavaScript中判断函数是new还是()调用的区别说明
Apr 07 Javascript
解决css和js的{}与smarty定界符冲突问题的两种方法
Sep 10 Javascript
jquery获取及设置outerhtml的方法
Mar 09 Javascript
基于jQuery+JSON的省市二三级联动效果
Jun 05 Javascript
关于js里的this关键字的理解
Aug 17 Javascript
使用EVAL处理jqchart jquery 折线图返回数据无效的解决办法
Nov 26 Javascript
浅谈JS正则表达式的RegExp对象和括号的使用
Jul 28 Javascript
AngularJS基础 ng-click 指令示例代码
Aug 01 Javascript
微信小程序实现无限滚动列表
May 29 Javascript
Vue自定义全局Toast和Loading的实例详解
Apr 18 Javascript
原生JS实现随机点名项目的实例代码
Apr 30 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
PHP统计数值数组中出现频率最多的10个数字的方法
2015/04/20 PHP
javascript 表单的友好用户体现
2009/01/07 Javascript
jQuery UI Autocomplete 体验分享
2012/02/14 Javascript
js中top/parent/frame概述及案例应用
2013/02/06 Javascript
深入理解javaScript中的事件驱动
2013/05/21 Javascript
使用JQ来编写最基本的淡入淡出效果附演示动画
2014/10/31 Javascript
JavaScript中利用Array和Object实现Map的方法
2015/07/27 Javascript
JavaScript的Polymer框架中dom-repeat与VM的相关操作
2015/07/29 Javascript
JS利用cookie记忆当前位置的防刷新导航效果
2015/10/15 Javascript
JavaScript面向对象程序设计教程
2016/03/29 Javascript
Jquery实现的简单轮播效果【附实例】
2016/04/19 Javascript
jQuery实现联动下拉列表查询框
2017/01/04 Javascript
ES6中module模块化开发实例浅析
2017/04/06 Javascript
js实现把时间戳转换为yyyy-MM-dd hh:mm 格式(es6语法)
2017/12/28 Javascript
在iFrame子页面里实现模态框的方法
2018/08/17 Javascript
vuex实现的简单购物车功能示例
2019/02/13 Javascript
Layui 数据表格批量删除和多条件搜索的实例
2019/09/04 Javascript
浅谈vue3中effect与computed的亲密关系
2019/10/10 Javascript
Vue学习笔记之计算属性与侦听器用法
2019/12/07 Javascript
[01:38]DOTA2第二届亚洲邀请赛中国区预选赛出线战队晋级之路
2017/01/17 DOTA
[01:14:41]DOTA2-DPC中国联赛定级赛 iG vs Magma BO3第一场 1月8日
2021/03/11 DOTA
python做量化投资系列之比特币初始配置
2018/01/23 Python
Python简直是万能的,这5大主要用途你一定要知道!(推荐)
2019/04/03 Python
详解pandas删除缺失数据(pd.dropna()方法)
2019/06/25 Python
Windows平台Python编程必会模块之pywin32介绍
2019/10/01 Python
8段用于数据清洗Python代码(小结)
2019/10/31 Python
浅谈keras使用中val_acc和acc值不同步的思考
2020/06/18 Python
python可视化 matplotlib画图使用colorbar工具自定义颜色
2020/12/07 Python
全球性的众包图形设计市场:DesignCrowd
2021/02/02 全球购物
高三自我鉴定怎么写
2013/10/19 职场文书
职业生涯规划书的格式
2013/12/29 职场文书
小学教师师德整改措施
2014/09/29 职场文书
营销与策划实训报告
2014/11/05 职场文书
机关单位保密工作责任书
2015/05/11 职场文书
2019年聘任书的写作格式及范文!
2019/07/03 职场文书
解决pytorch读取自制数据集出现过的问题
2021/05/31 Python