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 继承机制的实现
Aug 12 Javascript
javascrip客户端验证文件大小及文件类型并重置上传
Jan 12 Javascript
情人节之礼 js项链效果
Feb 13 Javascript
动态标签 悬停效果 延迟加载示例代码
Nov 21 Javascript
jquery的父子兄弟节点查找示例代码
Mar 03 Javascript
浅谈jQuery异步对象(XMLHttpRequest)
Nov 17 Javascript
原生JS查找元素的方法(推荐)
Nov 22 Javascript
微信小程序网络请求的封装与填坑之路
Apr 01 Javascript
jquery在vue脚手架中的使用方式示例
Aug 29 jQuery
vue实现PC端录音功能的实例代码
Jun 05 Javascript
Js通过AES加密后PHP用Openssl解密的方法
Jul 12 Javascript
微信小程序实现张图片合成为一张并下载
Jul 16 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
攻克CakePHP系列一 连接MySQL数据库
2008/10/22 PHP
PHP 循环删除无限分类子节点的实现代码
2013/06/21 PHP
Yii2中Restful API原理实例分析
2016/07/25 PHP
Yii2.0 Basic代码中路由链接被转义的处理方法
2016/09/21 PHP
IOS 开发之NSDictionary转换成JSON字符串
2017/08/14 PHP
Javascript学习笔记-详解in运算符
2011/09/13 Javascript
JQueryiframe页面操作父页面中的元素与方法(实例讲解)
2013/11/19 Javascript
javascript写的异步加载js文件函数(支持数组传参)
2014/06/07 Javascript
jQuery ajax应用总结
2016/06/02 Javascript
js判断是否为空和typeof的用法(详解)
2016/10/07 Javascript
Java与JavaScript中判断两字符串是否相等的区别
2017/03/13 Javascript
解决webpack打包速度慢的解决办法汇总
2017/07/06 Javascript
vue组件中的样式属性scoped实例详解
2018/10/30 Javascript
详解vue-router导航守卫
2019/01/19 Javascript
微信小程序实现写入读取缓存详解
2019/08/30 Javascript
vue打包通过image-webpack-loader插件对图片压缩优化操作
2020/11/12 Javascript
[01:08:29]DOTA2-DPC中国联赛定级赛 RNG vs Aster BO3第一场 1月9日
2021/03/11 DOTA
Python3.x和Python2.x的区别介绍
2013/02/12 Python
Python数据分析之双色球统计单个红和蓝球哪个比例高的方法
2018/02/03 Python
python 给DataFrame增加index行名和columns列名的实现方法
2018/06/08 Python
python中将两组数据放在一起按照某一固定顺序shuffle的实例
2019/07/15 Python
将Python文件打包成.EXE可执行文件的方法
2019/08/11 Python
在Python中使用MongoEngine操作数据库教程实例
2019/12/03 Python
python3中numpy函数tile的用法详解
2019/12/04 Python
Python3打包exe代码2种方法实例解析
2020/02/17 Python
python实现扫雷游戏
2020/03/03 Python
Python实现迪杰斯特拉算法过程解析
2020/09/18 Python
解决import tensorflow导致jupyter内核死亡的问题
2021/02/06 Python
俄罗斯美容和健康网上商店:Созвездие Красоты
2019/07/23 全球购物
西班牙用户之间买卖视频游戏的平台:Wakkap
2020/03/21 全球购物
教师申诉制度
2014/01/29 职场文书
护士优质服务演讲稿
2014/08/26 职场文书
2014乡镇干部纪律作风整顿思想汇报
2014/09/13 职场文书
领导班子对照检查剖析材料
2014/10/13 职场文书
班主任工作经验交流会总结
2015/11/02 职场文书
openstack云计算keystone组件工作介绍
2022/04/20 Servers