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 相关文章推荐
Javascript 颜色渐变效果的实现代码
Oct 01 Javascript
javascript for-in有序遍历json数据并探讨各个浏览器差异
Nov 30 Javascript
jQuery插件开发汇总
May 15 Javascript
js删除局部变量的实现方法
Jun 25 Javascript
浅析bootstrap原理及优缺点
Mar 19 Javascript
js获取地址栏参数的两种方法
Jun 27 Javascript
详解webpack和webpack-simple中如何引入css文件
Jun 28 Javascript
浏览器事件循环与vue nextTicket的实现
Apr 16 Javascript
小程序click-scroll组件设计
Jun 18 Javascript
让 babel webpack vue 配置文件支持智能提示的方法
Jun 22 Javascript
webpack3升级到webpack4遇到问题总结
Sep 30 Javascript
vue项目中在可编辑div光标位置插入内容的实现代码
Jan 07 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
收听困难?教您超简便短波广播抗干扰方法!
2021/03/01 无线电
如何在PHP中使用Oracle数据库(1)
2006/10/09 PHP
php验证邮箱和ip地址最简单方法汇总
2015/10/30 PHP
jquery 获取json数据实现代码
2009/04/27 Javascript
Extjs 几个方法的讨论
2010/01/28 Javascript
JavaScript Event学习第六章 事件的访问
2010/02/07 Javascript
js select常用操作控制代码
2010/03/16 Javascript
jquery的map与get方法详解
2013/11/04 Javascript
给ListBox添加双击事件示例代码
2013/12/02 Javascript
js document.write()使用介绍
2014/02/21 Javascript
Javascript玩转继承(三)
2014/05/08 Javascript
js取整数、取余数的方法
2014/05/11 Javascript
网页运行时提示对象不支持abigimage属性或方法
2014/08/10 Javascript
css与javascript跨浏览器兼容性总结
2014/09/15 Javascript
angularJS中$apply()方法详解
2015/01/07 Javascript
详解Jquery的事件操作和文档操作
2016/12/19 Javascript
vue项目中应用ueditor自定义上传按钮功能
2018/04/27 Javascript
jQuery实现仿京东防抖动菜单效果示例
2018/07/06 jQuery
JS实现的简单tab切换功能完整示例
2019/06/20 Javascript
vue中使用vue-pdf的方法详解
2020/09/05 Javascript
centos下更新Python版本的步骤
2013/02/12 Python
Python的Flask框架中Flask-Admin库的简单入门指引
2015/04/07 Python
python3+PyQt5使用数据库窗口视图
2018/04/24 Python
华为2019校招笔试题之处理字符串(python版)
2019/06/25 Python
pytorch 实现cross entropy损失函数计算方式
2020/01/02 Python
pytorch forward两个参数实例
2020/01/17 Python
TensorFlow实现checkpoint文件转换为pb文件
2020/02/10 Python
美国婴童服装市场上的领先品牌:Carter’s
2018/02/08 全球购物
"引用"与多态的关系
2013/02/01 面试题
网络工程系信息安全技术专业大学生求职信
2013/10/22 职场文书
出纳会计岗位职责
2014/03/12 职场文书
党的群众路线教育实践活动对照检查材料(个人)
2014/09/24 职场文书
交通事故起诉书
2015/05/19 职场文书
大学生受助感言
2015/08/01 职场文书
2019职场实习报告该怎么写?
2019/07/01 职场文书
你真的了解redis为什么要提供pipeline功能
2021/06/22 Redis