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 清除输入框中的数据
Apr 13 Javascript
模拟jQuery中的ready方法及实现按需加载css,js实例代码
Sep 27 Javascript
原生js实现复制对象、扩展对象 类似jquery中的extend()方法
Aug 30 Javascript
jQuery mobile 移动web(4)
Dec 20 Javascript
javascript模块化简单解析
Apr 07 Javascript
jQuery+PHP实现微信转盘抽奖功能的方法
May 25 Javascript
JS和canvas实现俄罗斯方块
Mar 14 Javascript
javascript 的变量、作用域和内存问题
Apr 19 Javascript
vue实现中部导航栏布局功能
Jul 30 Javascript
vue element upload实现图片本地预览
Aug 20 Javascript
JS实现吸顶特效
Jan 08 Javascript
design vue 表格开启列排序的操作
Oct 28 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中调用ASP.NET的WebService的代码
2011/04/22 PHP
javaScript array(数组)使用字符串作为数组下标的方法
2013/11/19 Javascript
JavaScript函数获取事件源的小例子
2014/05/14 Javascript
javascript实现按回车键切换焦点
2015/02/09 Javascript
Jquery promise实现一张一张加载图片
2015/11/13 Javascript
详解JavaScript UTC时间转换方法
2016/01/07 Javascript
bootstrap提示标签、提示框实现代码
2016/12/28 Javascript
解决webpack -p压缩打包react报语法错误的方法
2017/07/03 Javascript
Angular限制input框输入金额(是小数的话只保留两位小数点)
2017/07/13 Javascript
JavaScript数组去重算法实例小结
2018/05/07 Javascript
Vue全局分页组件的实现代码
2018/08/10 Javascript
学习jQuery中的noConflict()用法
2018/09/28 jQuery
vue.js层叠轮播效果的实例代码
2018/11/08 Javascript
vue地址栏直接输入路由无效问题的解决
2018/11/15 Javascript
JS面向对象编程基础篇(三) 继承操作实例详解
2020/03/03 Javascript
Vue微信公众号网页分享的示例代码
2020/05/28 Javascript
[42:52]Optic vs Serenity 2018国际邀请赛淘汰赛BO3 第二场 8.22
2018/08/23 DOTA
python自动化测试之从命令行运行测试用例with verbosity
2014/09/28 Python
给Python的Django框架下搭建的BLOG添加RSS功能的教程
2015/04/08 Python
老生常谈Python基础之字符编码
2017/06/14 Python
python从入门到精通 windows安装python图文教程
2019/05/18 Python
使用Keras建立模型并训练等一系列操作方式
2020/07/02 Python
Python爬虫+Tkinter制作一个翻译软件的示例
2021/02/20 Python
加拿大约会网站:EliteSingles.ca
2018/01/12 全球购物
程序员岗位职责
2013/11/11 职场文书
建筑院校毕业生求职信
2014/06/13 职场文书
协会周年庆活动方案
2014/08/26 职场文书
大学拉赞助协议书范文
2014/09/26 职场文书
2014年个人工作总结报告
2014/11/27 职场文书
运动会跳远广播稿
2015/08/19 职场文书
车辆挂靠协议书
2016/03/23 职场文书
启迪人心的励志语录:脾气永远不要大于本事
2020/01/02 职场文书
springboot集成flyway自动创表的详细配置
2021/06/26 Java/Android
前端vue+express实现文件的上传下载示例
2022/02/18 Vue.js
node快速搭建后台的实现步骤
2022/02/18 NodeJs
浅谈Python中对象是如何被调用的
2022/04/06 Python