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跟随滚动条滚动浮动代码
Dec 31 Javascript
js实现网页标题栏闪烁提示效果实例分析
Nov 20 Javascript
JS版元素周期表实现方法
Aug 05 Javascript
js点击文本框后才加载验证码实例代码
Oct 20 Javascript
javascript基本语法
May 31 Javascript
JS获得多个同name 的input输入框的值的实现方法
Jan 09 Javascript
jquery实现简单实用的轮播器
May 23 jQuery
基于EasyUI的基础之上实现树形功能菜单
Jun 28 Javascript
使用 Node.js 模拟滑动拼图验证码操作的示例代码
Nov 02 Javascript
小程序和web画三角形实现解析
Sep 02 Javascript
vue 实现走马灯效果
Oct 28 Javascript
解决vue2中使用elementUi打包报错的问题
Sep 22 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下常用正则表达式整理
2010/10/26 PHP
基于session_unset与session_destroy的区别详解
2013/06/03 PHP
PHP判断变量是否为0的方法
2014/02/08 PHP
php中的动态调用实例分析
2015/01/07 PHP
php身份证号码检查类实例
2015/06/18 PHP
使用phpexcel类实现excel导入mysql数据库功能(实例代码)
2016/05/12 PHP
php版阿里云OSS图片上传类详解
2016/12/01 PHP
PHP设计模式之工厂模式实例总结
2017/09/01 PHP
使用jquery操作session方法分享
2015/01/22 Javascript
js中判断变量类型函数typeof的用法总结
2016/08/09 Javascript
简单理解vue中实例属性vm.$els
2016/12/01 Javascript
JS作用域深度解析
2016/12/29 Javascript
react-redux中connect()方法详细解析
2017/05/27 Javascript
代码详解JS操作剪贴板
2018/02/11 Javascript
react配合antd组件实现的管理系统示例代码
2018/04/24 Javascript
layui实现图片虚拟路径上传,预览和删除的例子
2019/09/25 Javascript
python正则匹配抓取豆瓣电影链接和评论代码分享
2013/12/27 Python
python制作最美应用的爬虫
2015/10/28 Python
深入理解Python3中的http.client模块
2017/03/29 Python
Python数据操作方法封装类实例
2017/06/23 Python
Python 将RGB图像转换为Pytho灰度图像的实例
2017/11/14 Python
tensorflow实现图像的裁剪和填充方法
2018/07/27 Python
win10下tensorflow和matplotlib安装教程
2018/09/19 Python
Python实现将通信达.day文件读取为DataFrame
2018/12/22 Python
详解python中TCP协议中的粘包问题
2019/03/22 Python
Django框架静态文件使用/中间件/禁用ip功能实例详解
2019/07/22 Python
pytorch1.0中torch.nn.Conv2d用法详解
2020/01/10 Python
CSS3 渐变(Gradients)之CSS3 径向渐变
2016/07/08 HTML / CSS
Annoushka英国官网:英国奢侈珠宝品牌
2018/10/20 全球购物
冰淇淋店的创业计划书
2014/02/07 职场文书
产品质量承诺范本
2014/03/31 职场文书
民主生活会对照检查材料(统计局)
2014/09/21 职场文书
保护环境的宣传语
2015/07/13 职场文书
致接力运动员加油稿
2015/07/21 职场文书
只需要12页,掌握撰写一流商业计划书的技巧
2019/05/07 职场文书
教你怎么用Python selenium操作浏览器对象的基础API
2021/06/23 Python