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 相关文章推荐
jscript之Open an Excel Spreadsheet
Jun 13 Javascript
深入浅出理解javaScript原型链
May 09 Javascript
javascript实现动态导入js与css等静态资源文件的方法
Jul 25 Javascript
node.js使用cluster实现多进程
Mar 17 Javascript
JavaScript中日期函数的相关操作知识
Aug 03 Javascript
JS动态遍历json中所有键值对的方法(不知道属性名的情况)
Dec 28 Javascript
解决微信内置浏览器返回上一页强制刷新问题方法
Feb 05 Javascript
简单的vue-resourse获取json并应用到模板示例
Feb 10 Javascript
微信小程序页面跳转功能之从列表的item项跳转到下一个页面的方法
Nov 27 Javascript
javascript将非数值转换为数值
Sep 13 Javascript
JS中验证整数和小数的正则表达式
Oct 08 Javascript
vue中axios实现数据交互与跨域问题
May 12 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下拉选项的批量操作的实现代码
2013/10/14 PHP
浅谈php的优缺点
2015/07/14 PHP
php 删除指定文件夹的实例讲解
2017/07/25 PHP
laravel 修改.htaccess文件 重定向public的解决方法
2019/10/12 PHP
JavaScript delete操作符应用实例
2009/01/13 Javascript
JavaScript 学习笔记(六)
2009/12/31 Javascript
html超链接打开窗口大小的方法
2013/03/05 Javascript
JS验证邮箱格式是否正确的代码
2013/12/05 Javascript
jQuery插件bxSlider实现响应式焦点图
2015/04/12 Javascript
JavaScript面向对象的实现方法小结
2015/04/14 Javascript
JavaScript实现函数返回多个值的方法
2015/06/09 Javascript
JavaScript中getUTCSeconds()方法的使用详解
2015/06/11 Javascript
详解JavaScript正则表达式之RegExp对象
2015/12/13 Javascript
AngularJS入门教程之与服务器(Ajax)交互操作示例【附完整demo源码下载】
2016/11/02 Javascript
jQuery实现级联下拉框实战(5)
2017/02/08 Javascript
bootstrap中添加额外的图标实例代码
2017/02/15 Javascript
发布Angular应用至生产环境的方法
2018/12/10 Javascript
vue2.0基于vue-cli+element-ui制作树形treeTable
2019/04/30 Javascript
详解小程序之简单登录注册表单验证
2019/05/13 Javascript
JavaScript实现秒杀时钟倒计时
2019/09/29 Javascript
python返回昨天日期的方法
2015/05/13 Python
Python使用gensim计算文档相似性
2016/04/10 Python
Python列表list内建函数用法实例分析【insert、remove、index、pop等】
2017/07/24 Python
浅谈Python实现贪心算法与活动安排问题
2017/12/19 Python
用python实现百度翻译的示例代码
2018/03/09 Python
很酷的python表白工具 你喜欢我吗
2019/04/11 Python
详解python pandas 分组统计的方法
2019/07/30 Python
用python写测试数据文件过程解析
2019/09/25 Python
基于Pycharm加载多个项目过程图解
2020/01/19 Python
Python3爬虫发送请求的知识点实例
2020/07/30 Python
python 基于Apscheduler实现定时任务
2020/12/15 Python
利用Python实现最小二乘法与梯度下降算法
2021/02/21 Python
巴西本土电商平台:Americanas
2020/06/21 全球购物
小学生竞选班干部演讲稿
2014/04/24 职场文书
《草船借箭》教学反思
2016/02/23 职场文书
详解用Python把PDF转为Word方法总结
2021/04/27 Python