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 相关文章推荐
再谈ie和firefox下的document.all属性
Oct 21 Javascript
Jquery实现带动画效果的经典二级导航菜单
Mar 22 Javascript
javascript常用的方法整理
Aug 20 Javascript
JQuery实现文字无缝滚动效果示例代码(Marquee插件)
Mar 07 Javascript
js实现图片放大展示效果
Aug 30 Javascript
select2 ajax 设置默认值,初始值的方法
Aug 09 Javascript
webpack开发环境和生产环境的深入理解
Nov 08 Javascript
深入理解Node内建模块和对象
Mar 12 Javascript
VueJs里利用CryptoJs实现加密及解密的方法示例
Apr 29 Javascript
js设计模式之代理模式及订阅发布模式实例详解
Aug 15 Javascript
vue实现权限控制路由(vue-router 动态添加路由)
Nov 04 Javascript
原生javascript的ajax请求及后台PHP响应操作示例
Feb 24 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
利用Fix Rss Feeds插件修复WordPress的Feed显示错误
2015/12/19 PHP
laravel 5.4 + vue + vux + element的环境搭配过程介绍
2018/04/26 PHP
Laravel 已登陆用户再次查看登陆页面的自动跳转设置方法
2019/09/30 PHP
javascript prototype 原型链
2009/03/12 Javascript
在javascript中关于节点内容加强
2013/04/11 Javascript
7个jQuery最佳实践
2016/01/12 Javascript
XML、HTML、CSS与JS的区别整理
2016/02/18 Javascript
jQuery实现的模拟弹出窗口功能示例
2016/11/24 Javascript
javascript事件捕获机制【深入分析IE和DOM中的事件模型】
2016/12/15 Javascript
jQuery实现鼠标悬停3d菜单展开动画效果
2017/01/19 Javascript
js 颜色选择插件
2017/01/23 Javascript
基于node.js依赖express解析post请求四种数据格式
2017/02/13 Javascript
vue.js实现简单轮播图效果
2017/10/10 Javascript
详解微信小程序缓存--缓存时效性
2019/05/02 Javascript
微信小程序自定义弹出层效果
2020/05/26 Javascript
Python实现CET查分的方法
2015/03/10 Python
python简单程序读取串口信息的方法
2015/03/13 Python
Python数据可视化正态分布简单分析及实现代码
2017/12/04 Python
TensorFlow深度学习之卷积神经网络CNN
2018/03/09 Python
python装饰器深入学习
2018/04/06 Python
python 实现语音聊天机器人的示例代码
2018/12/02 Python
python实现手机销售管理系统
2019/03/19 Python
利用python-docx模块写批量生日邀请函
2019/08/26 Python
Tensorflow 多线程与多进程数据加载实例
2020/02/05 Python
Pytest单元测试框架如何实现参数化
2020/09/05 Python
美国专营婴幼儿用品的购物网站:buybuy BABY
2017/01/01 全球购物
美国知名保健品网站:LuckyVitamin(支持中文)
2017/08/09 全球购物
瑞典度假品牌:OAS
2019/05/28 全球购物
Deichmann英国:德国鞋类零售商
2021/01/30 全球购物
报到证丢失证明
2014/01/11 职场文书
自我鉴定总结
2014/03/24 职场文书
结婚保证书范文
2014/04/29 职场文书
十周年庆典策划方案
2014/06/03 职场文书
化工专业求职信
2014/07/01 职场文书
小学社会实践活动总结
2014/07/03 职场文书
银行客户经理岗位职责
2015/04/09 职场文书