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 相关文章推荐
可以显示单图片,多图片ajax请求的ThickBox3.1类下载
Dec 23 Javascript
浏览器无法运行JAVA脚本的解决方法
Jan 09 Javascript
添加JavaScript重载函数的辅助方法2
Jul 04 Javascript
javascript中的作用域和上下文使用简要概述
Dec 05 Javascript
判断及设置浏览器全屏模式
Apr 20 Javascript
一款简单的jQuery图片标注效果附源码下载
Mar 22 Javascript
JS结合bootstrap实现基本的增删改查功能
Jul 22 Javascript
assert()函数用法总结(推荐)
Jan 25 Javascript
JavaScript通过改变文字透明度实现的文字闪烁效果实例
Apr 27 Javascript
JS控制鼠标拒绝点击某一按钮的实例
Dec 29 Javascript
微信小程序实现工作时间段选择
Feb 15 Javascript
基于vue实现探探滑动组件功能
May 29 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下HTTP Response中的Chunked编码实现方法
2008/11/19 PHP
php针对cookie操作的队列操作类实例
2014/12/10 PHP
php实现递归与无限分类的方法
2015/02/16 PHP
PHP生成图片验证码功能示例
2017/01/12 PHP
基于JQuery 的消息提示框效果代码
2011/07/31 Javascript
JS获取并操作iframe中元素的方法
2013/03/21 Javascript
浅谈jquery的map()和each()方法
2016/06/12 Javascript
浅谈angularjs module返回对象的坑(推荐)
2016/10/21 Javascript
深入了解JavaScript的逻辑运算符(与、或)
2016/12/20 Javascript
nodejs multer实现文件上传与下载
2017/05/10 NodeJs
vue 点击展开显示更多(点击收起部分隐藏)
2019/04/09 Javascript
vue父组件触发事件改变子组件的值的方法实例详解
2019/05/07 Javascript
[01:30]2016国际邀请赛中国区预选赛神秘商店火爆开启
2016/06/26 DOTA
Python基于pillow判断图片完整性的方法
2016/09/18 Python
python3.4用循环往mysql5.7中写数据并输出的实现方法
2017/06/20 Python
python opencv检测目标颜色的实例讲解
2018/04/02 Python
Python2包含中文报错的解决方法
2018/07/09 Python
Python打包方法Pyinstaller的使用
2018/10/09 Python
python 保存float类型的小数的位数方法
2018/10/17 Python
Django框架模板文件使用及模板文件加载顺序分析
2019/05/23 Python
python实现画出e指数函数的图像
2019/11/21 Python
在Matplotlib图中插入LaTex公式实例
2020/04/17 Python
python 多进程和协程配合使用写入数据
2020/10/30 Python
查找适用于matplotlib的中文字体名称与实际文件名对应关系的方法
2021/01/05 Python
美国最大的珠宝首饰网上商城:Jewelry.com
2016/07/22 全球购物
澳大利亚时尚前卫设计师珠宝在线:Amber Sceats
2017/10/04 全球购物
日本食品网上商店:JaponShop.com
2017/11/28 全球购物
日期和时间问题
2015/01/04 面试题
小学运动会口号
2014/06/07 职场文书
红领巾心向党演讲稿
2014/09/10 职场文书
模范教师材料大全
2014/12/16 职场文书
2015年小学英语教师工作总结
2015/05/12 职场文书
修辞手法有哪些?
2019/08/29 职场文书
Nginx图片服务器配置之后图片访问404的问题解决
2022/03/21 Servers
Python多线程实用方法以及共享变量资源竞争问题
2022/04/12 Python
Python实现简单得递归下降Parser
2022/05/02 Python