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 相关文章推荐
Some tips of wmi scripting in jscript (1)
Apr 03 Javascript
jquery 全局AJAX事件使用代码
Nov 05 Javascript
jquery $.trim()方法使用介绍
May 21 Javascript
JavaScript实现查找字符串中第一个不重复的字符
Dec 29 Javascript
jQuery的ajax下载blob文件
Jul 21 Javascript
基于bootstrap风格的弹框插件
Dec 28 Javascript
浅谈vue路径优化之resolve
Oct 13 Javascript
浅谈Vue内置component组件的应用场景
Mar 27 Javascript
Angular2进阶之如何避免Dom误区
Apr 02 Javascript
vue二级菜单导航点击选中事件的方法
Sep 12 Javascript
解决ant-design-vue中menu菜单无法默认展开的问题
Oct 31 Javascript
如何用JavaScript学习算法复杂度
Apr 30 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
天使彦史上最神还原,性别曝光的那一刻,百万网友恋爱了
2020/03/02 国漫
PHP制作图形验证码代码分享
2014/10/23 PHP
PHP文件缓存smarty模板应用实例分析
2016/02/26 PHP
用Javascript数组处理多个字符串的连接问题
2009/08/20 Javascript
Jquery选择器 $实现原理
2009/12/02 Javascript
JS的get和set使用示例
2014/02/20 Javascript
基于Jquery实现键盘按键监听
2014/05/11 Javascript
网页下载文件期间如何防止用户对网页进行其他操作
2014/06/27 Javascript
node.js中的buffer.Buffer.byteLength方法使用说明
2014/12/10 Javascript
jQuery支持动态参数将函数绑定到事件上的方法
2015/03/17 Javascript
JQUERY表单暂存功能插件分享
2016/02/23 Javascript
JS中JSON对象和String之间的互转及处理技巧
2016/04/06 Javascript
jquery css实现邮箱自动补全
2016/11/14 Javascript
Angular.js初始化之ng-app的自动绑定与手动绑定详解
2017/07/31 Javascript
BootStrap 页签切换失效的解决方法
2017/08/17 Javascript
用最简单的方法判断JavaScript中this的指向(推荐)
2017/09/04 Javascript
Bootstrap 3多级下拉菜单实例
2017/11/23 Javascript
小程序实现短信登录倒计时
2019/07/12 Javascript
Vue Router 实现动态路由和常见问题及解决方法
2020/03/06 Javascript
vue移动端的左右滑动事件详解
2020/06/17 Javascript
vue-cli3项目打包后自动化部署到服务器的方法
2020/09/16 Javascript
下载安装setuptool和pip linux安装pip    
2014/01/24 Python
详解tensorflow载入数据的三种方式
2018/04/24 Python
python线程中同步锁详解
2018/04/27 Python
如何安装多版本python python2和python3共存以及pip共存
2018/09/18 Python
对python中的float除法和整除法的实例详解
2019/07/20 Python
python+openCV调用摄像头拍摄和处理图片的实现
2019/08/06 Python
python编程进阶之异常处理用法实例分析
2020/02/21 Python
django处理select下拉表单实例(从model到前端到post到form)
2020/03/13 Python
Pyqt5 关于流式布局和滚动条的综合使用示例代码
2020/03/24 Python
Python csv文件记录流程代码解析
2020/07/16 Python
Python常用类型转换实现代码实例
2020/07/28 Python
商场端午节活动方案
2014/01/29 职场文书
英文推荐信格式范文
2014/05/09 职场文书
男方婚前保证书
2015/02/28 职场文书
MySQL 常见的数据表设计误区汇总
2021/06/07 MySQL