webpack3.0升级4.0的方法步骤


Posted in Javascript onApril 02, 2020

1.webpack 3.11升级4.26

为了提升打包效率,在webpack3.11基础之上做了升级,webpack4.0发布以来,零配置的webpack对项目本身提供的“打包”和“压缩”功能已经做了优化,如果在项目开始使用4.0而不用vue-cli的默认配置,遇到的问题或许能少一些。

2. 安装/升级依赖

这些依赖有的是在build过程中发现依赖有新的替换或者报错,逐步替换的,如果想遇到多个坑,可以先把webpack、webpack-cli升级到对应版本

devDependencies:

"extract-text-webpack-plugin": "^4.0.0-beta.0"
"html-webpack-plugin": "^4.0.0-beta.14"
"mini-css-extract-plugin": "^0.9.0" (旧的optimize-css-assets-webpack不支持了)
"preload-webpack-plugin": "^3.0.0-beta.4"
"script-ext-html-webpack-plugin": "^2.1.3"
"vue-loader": "^15.3.0"
"webpack": "^4.26.1"
"webpack-cli": "^3.1.2"
"webpack-dev-server": "^3.2.1"
"script-ext-html-webpack-plugin": "^2.1.3"

3. 遇到的问题

升级webpack后,build报错:ERROR in ./src/App.vue
Module Error (from ./node_modules/vue-loader/lib/index.js

解决:升级vue-loader至15.3.0,

webpack.base.conf.js添加

const {VueLoaderPlugin} = require('vue-loader')
module.exports中添加
 plugins:[new VueLoaderPlugin()]

修改配置文件 webpack.prod.conf.js:

webpack.optimize.CommonsChunkPlugin has been removed, please use config.optimization.splitChunks instead.

解决:

webpack.prod.conf.js webpackConfig配置:
optimization: {
 noEmitOnErrors: true,
 concatenateModules: true,
 splitChunks: {
  chunks: 'all',
  name: 'common',
 },
 runtimeChunk: {
  name: 'runtime'
 }
 }
webpack.prod.conf.js webpackConfig配置: 
optimization:{
 namedModules: true
 },

Plugin could not be registered at ‘html-webpack-plugin-before-html-processing'. Hook was not found.

解决:

npm i preload-webpack-plugin@next -D

Tapable.plugin is deprecated. Use new API on .hooks instead

问题:extract-text-webpack-plugin兼容问题 ,功能:extract css into its own file

解决: 卸载extract-text-webpack-plugin,安装mini-css-extract-plugin

new MiniCssExtractPlugin({
  filename: utils.assetsPath('css/[name].[contenthash].css'),
  allChunks: false,
 }),

build出错:ERROR in TypeError: Cannot read property ‘hash' of undefined

解决:

去掉这段
  //打包计时
  const SpeedMeasurePlugin = require("speed-measure-webpack-plugin");
  const smp = new SpeedMeasurePlugin();

WARNING in configuration
The ‘mode' option has not been set, webpack will fallback to ‘production' for this value. Set ‘mode' option to ‘development' or ‘production' to enable defaults for each environment.
You can also set it to ‘none' to disable any default behavior. Learn more: https://webpack.js.org/concepts/mode/

解决:webpackConfig添加 mode: ‘production'

Tapable.plugin is deprecated. Use new API on .hooks instead

解决:

npm i --save-dev extract-text-webpack-plugin@next

会下载到 extract-text-webpack-plugin@4.0.0-beta

Error: webpack.optimize.CommonsChunkPlugin has been removed, please use config.o ptimization…

解决:

  • 去掉 webpack.optimize.CommonsChunkPlugin相关配置
  • webpackConfig中与plugins的同级添加
optimization: {
 splitChunks: {
   cacheGroups: {
    commons: {
     name: "commons",
     chunks: "initial",
     minChunks: 2
    }
   }
  }
 },

Unhandled rejection Error: “dependency” is not a valid chunk sort mode

new HtmlWebpackPlugin({
  filename: config.build.index,
  template: 'index.html',
  inject: true,
  minify: {
  removeComments: true,
  collapseWhitespace: true,
  removeAttributeQuotes: true
  },
  // necessary to consistently work with multiple chunks via CommonsChunkPlugin
  chunksSortMode: 'dependency'
 }),

解决:chunksSortMode改为auto或者注释

至此:npm run build 正常
接下来调npm run dev,直接运行成功

4. 总结

开启cache的情况下,原来打包时间22s左右,现在build最快8s左右

升级思路:

  1. 卸载webpack旧版本、安装新版本webpack, webpack-cli
  2. 遇到loader、plugin报错,升级loader、plugin,有的在4.0不支持,需要换成新的
  3. 卸载 ExtractTextPlugin、删除对应配置,改用 mini-css-extract-plugin
  4. 配置环境mode
  5. 其它wenpack3.0优化配置兼容处理

到此这篇关于webpack3.0升级4.0的方法步骤的文章就介绍到这了,更多相关webpack3.0升级4.0内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Javascript 相关文章推荐
JS中style属性
Oct 11 Javascript
jquery select选中的一个小问题
Oct 11 Javascript
验证控件与Button的OnClientClick事件详细解析
Dec 04 Javascript
用js模拟struts2的多action调用示例
May 19 Javascript
使用js画图之正弦曲线
Jan 12 Javascript
Bootstrap CDN和本地化环境搭建
Oct 26 Javascript
简单理解vue中实例属性vm.$els
Dec 01 Javascript
vue2.0开发实践总结之入门篇
Dec 06 Javascript
Bootstrap栅格系统简单实现代码
Mar 06 Javascript
JS+WCF实现进度条实时监测数据加载量的方法详解
Dec 19 Javascript
Vue中使用vux配置代码详解
Sep 16 Javascript
使用javascript解析二维码的三种方式
Nov 11 Javascript
Javascript模块化机制实现原理详解
Apr 02 #Javascript
sharp.js安装过程中遇到的问题总结
Apr 02 #Javascript
viewer.js一个强大的基于jQuery的图像查看插件(支持旋转、缩放)
Apr 01 #jQuery
Selenium执行Javascript脚本参数及返回值过程详解
Apr 01 #Javascript
vue+render+jsx实现可编辑动态多级表头table的实例代码
Apr 01 #Javascript
js实现数据导出为EXCEL(支持大量数据导出)
Mar 31 #Javascript
Vue路由守卫及页面登录权限控制的设置方法(两种)
Mar 31 #Javascript
You might like
php 在文件指定行插入数据的代码
2010/05/08 PHP
PHP 数组和字符串互相转换实现方法
2013/03/26 PHP
基于php的微信公众平台开发入门实例
2015/04/15 PHP
PHP中文竖排转换实现方法
2015/10/23 PHP
PHP实现的常规正则验证helper公共类完整实例
2017/04/27 PHP
JS Array对象入门分析
2008/10/30 Javascript
javascript window.confirm确认 取消对话框实现代码小结
2012/10/21 Javascript
Javascript根据指定下标或对象删除数组元素
2012/12/21 Javascript
JS下拉框内容左右移动效果的具体实现
2013/07/10 Javascript
JS案例分享之金额小写转大写
2014/05/15 Javascript
jQuery实现的原图对比窗帘效果
2014/06/15 Javascript
javascript中的遍历for in 以及with的用法
2014/12/22 Javascript
简单谈谈javascript Date类型
2015/09/06 Javascript
jQuery+ajax读取并解析XML文件的方法
2016/09/09 Javascript
vue.js开发实现全局调用的MessageBox组件实例代码
2017/11/22 Javascript
vuex中的 mapState,mapGetters,mapActions,mapMutations 的使用
2018/04/13 Javascript
最后说说Vue2 SSR 的 Cookies 问题
2018/05/25 Javascript
VUE在for循环里面根据内容值动态的加入class值的方法
2018/08/12 Javascript
jQuery实现基本淡入淡出效果的方法详解
2018/09/05 jQuery
微信小程序云开发 生成带参小程序码流程
2019/05/18 Javascript
Vue替代marquee标签超出宽度文字横向滚动效果
2019/12/09 Javascript
Python网页解析利器BeautifulSoup安装使用介绍
2015/03/17 Python
Python中的默认参数详解
2015/06/24 Python
Python 多进程和数据传递的理解
2017/10/09 Python
python中numpy.zeros(np.zeros)的使用方法
2017/11/07 Python
连接pandas以及数组转pandas的方法
2019/06/28 Python
Django单元测试工具test client使用详解
2019/08/02 Python
python+selenium select下拉选择框定位处理方法
2019/08/24 Python
浅谈Python_Openpyxl使用(最全总结)
2019/09/05 Python
python爬虫请求头的使用
2020/12/01 Python
印尼最大的婴儿用品购物网站:Orami
2017/09/28 全球购物
索引覆盖(Index Covering)查询含义
2012/02/18 面试题
美发店5.1活动方案
2014/01/24 职场文书
PyTorch dropout设置训练和测试模式的实现
2021/05/27 Python
python中sqllite插入numpy数组到数据库的实现方法
2021/06/21 Python
mysql中如何用命令创建联合唯一索引
2022/04/20 MySQL