【前端学习记录】记一次升级webpack5的踩坑经历

一次字节跳动前端实习面试 前言 准备了一个星期。刚刚结束了我人生中第一次面试。本以为胜券在握,但最后以失败告终。虽然莫名奇妙的在hr评估环节被挂了,不过我觉得挂的不冤,还有好多值得自己反思和提升的地方。同时感谢二面的面试小哥,谢谢他的肯定与鼓励,让我重整旗鼓。这次面试也是对我的一次磨练,失败并不可怕,害怕失败才可怕! 经过这次面试,我总结了下前端大厂对知识的深度和广度都有一定要求的,还有尤其是字节跳动对算法很重视,这一点无... 阅读详情

背景

最近在学习webpack5的使用和原理,学习的过程中,发现可以对项目上有很多优化,但是项目上使用的却是webpack4,而webpack5已经有好长时间了,再加上项目上不是很紧张,就新拉了一个分支,尝试将webpack4升级到webpack5。在这个过程中踩了很多坑,记录一下。

当前状态

项目上使用的webpack版本是4.x,虽然在package.json中没有体现出来,但是可以在node_modules里面可以看到。在node_modules里面,打开webpack文件夹,点击package.json,从_id上可以看到当前的版本。接下来开始升级过程。

开始升级

查看别人的升级过程

webpack4升级到webpack5经验总结这篇文章提供了升级的思路(还看了另一篇文章: 极致编译速度,一文搞定webpack5升级),就是先装webpack5,然后将所有依赖的版本统一升级到最新,最后根据控制台报错来逐一击破。

安装webpack5

删除项目node_modules里的webpack文件,因为其版本是4.x,然后控制台输入

npm i webpack@latest

这样会在package.json里面增加一项webpack版本号的配置项。并在node_modules文件夹里生成新的webpack的包。

安装npm-check-updates

这个包是用来检查当前依赖的版本的,装好后,执行 ncu -u,可以自动将所有的依赖版本更新到最新,然后再 npm i 即可。关于ncu 的用法,可以查看 关于npm 包更新工具npm-check-updates 使用详解这篇文章。

由于项目上使用的vue2,没有使用vue3,就是想只更新一下webpack的版本,于是在执行完 ncu -u之后,我把vue相关的版本号又退回了原来的版本号,只更新了一部分版本。更新完之后,开始 npm run build,于是报错之旅开始了。

Error:Cannot find module 'fs/promises

大部分关于这个报错的解决方案,都是类似这种的,cnpm报错:“Error:Cannot find module ‘fs/promises” 解决方案。说是node版本低,或是cnpm版本高,但是我没有用cnpm,所以按着装了下cnpm也不行。后来看到这篇文章,Cannot find module ‘fs/promises’ Electron JS ,上面提到有人升级node到14将问题解决了,我尝试升到node14,果然不再报错了。接下来继续开始ncu -u,可以正常使用。再次 npm run build ,继续报错。

Error: Cannot find module ‘webpack/lib/rules/DescriptionDataMatcherRulePlugin’

这个问题网上大多数的解决方案,都是说webpack的版本不匹配,webpack的版本太高了,重新降为webpack 4.x就好了,可是可是,我就是要升级的啊,是不可以打退堂鼓的。

Error: Cannot find module ‘webpack/lib/rules/DescriptionDataMatcherRulePlugin’ Require stack这篇文章中提到 可以尝试手动更新 vue-loader 包,于是 npm i vue-loader@15.9.8,之后问题解决。再次 npm run build ,继续报错。

Error: Rule can only have one resource source (provided resource and test + include + exclude) in { “exclude”: [ null ], …

这个问题,我以为是说webpack.config.js这个文件配置的有问题,但是经过一番探索和尝试之后,发现问题的原因是 @vue/cli 依赖 webpack@4,它自带的 webpack 配置无法兼容 webpack@5 ,于是就报错,不能继续编译。
于是我再次执行 ncu -u , npm i,开始更新vue-cli的版本至最新,问题解决。再次 npm run build ,继续报错。

Error: PostCSS plugin postcss-discard-comments requires PostCSS 8. Migration guide for end-users:

这个很显然是版本问题,执行一下 npm install postcss@8.2.2即可解决,这里不再多说。再次 npm run build ,继续报错。并提示:

Browserslist: caniuse-lite is outdated. Please run:
npx browserslist@latest --update-db

于是执行 npx browserslist@latest --update-db ,再次 npm run build ,继续报错。

TypeError: compiler.plugin is not a function

关于这个报错,网上有很多解决方案,可能是不同原因导致的,关于webpack5 使用 PurifyCSSPlugin 插件去除 多余css 报错TypeError: compiler.plugin is not a function 解决以及原因,但是我的代码中并没有使用这个插件。
控制台报错指向了compiler.plugin('emit', function (compilation, callback) {,看了新安webpack插件后编译报错compiler.plugin is not a function这篇文章后,将compiler.plugin('emit', function (compilation, callback) {替换成compiler.hooks.emit.tapAsync('GenerateAssetWebpackPlugin', (compilation, callback) => {。再次 npm run build ,继续报错。

Module not found: Error: Can’t resolve ‘js-base64’

执行npm i js-base64即解决问题,原先代码里没有install,webpack4没有报错,webpack5检查出来,重新install一下即可。再次 npm run build ,不再报错。执行 npm run serve ,继续报错。

ValidationError: Invalid options object. Dev Server has been initialized using an options object that does not match the API schema. -options has an unknown property ‘inline’. These properties are valid:

这个问题的原因是inline属性被弃用了,注释掉就好。重新执行 npm run serve ,问题解决,启动成功,但继续报错。

Error: The project seems to require yarn but it’s not installed.

执行npm i yarn,重新执行 npm run serve ,问题解决,启动成功,不再报错。但是出现了一个告警

export ‘default’ (imported as ‘echarts’) was not found in ‘echarts’

import echarts from 'echarts';改为import * as echarts from 'echarts';问题解决,重新执行 npm run serve ,问题解决,启动成功,不再告警。

最后

踩坑过程至此结束。webpack5顺利升级成功。 webpack5的升级完应该还需要注意一些其他事项,具体可参考 官方文档:从 v4 升级到 v5

Webpack5 升级》- Vue2.x 项目 Webpack 4 升级 5(半自动升级 webpack4升级5 (半自动升级 阅读详情

相关推荐

webpack 4升级webpack 5 (node 14.6 升级到 node16 引发的问题)

最近node 更新了,我从 node14.6 升级到 node 16.4, 对于我新的项目来说,木有任何问题。但是今天要求在老项目中进行添加需求,发现代码运行竟然报错。 项目启动报错 第一次启动项目报错,报错内容是 Node Sass does not yet support your current environment: Windows 64-bit, 这个问题相信大家都清楚, node-sass 出问题了 按照以往的经验,删除 node_modules, 然后重新按照 node-sass, .

twinkle的博客 6179

npm build报错Cannot find module ‘webpack/lib/rules/BasicEffectRulePlugin‘解决方法

尝试了无数种方法,最后删除项目,重新下载源码,重新编译解决。各种操作把环境弄乱了。

邓邓子的博客 1951

vue2项目升级到vue3经历分享1

看到下面这个结果真是头大,工程师是不是在摸鱼,复制、粘贴不用动脑,为何不写一个指令来实现。这个里面的工作量非常之大,得耐心去调整。,工程师采用vuex存储状态,肯定不合理,结果就是多租户被架空。像这类问题估计99%的前端开发工程师面试一定能答上来,但是实际应用就只能呵呵了。看看原来的store方式调用api,写法确实冗余拖拉,没有新的方式简洁。升级到vue3,预计工作量有点大,于是想着把过程记录下来。模式,例如这样的,是直接引用了api里面的方法。新方式,一句话定义完了,不用搞那么多绕绕。

warrah 南极狼 2741

webpack4 升级webpack5 过程总结

本文章记录本次从webpack4框架升级webpack5之后衍生出来的所有更改 框架主体为 zzy-javascript-frame(地址在文末) 此项目为自行开发构建,包含原 webpack4 版本 和升级后的 webpack5 版本 框架技术栈为 react、react-router、HOOK、react-redux(已安装,未使用)、antd-mobile(UI框架) 插件相关改动 ...

渣渣宇的博客 8880

webpack4升级webpack5经验总结

最近接手了公司内部webpack相关的依赖包,于是打算优化一波。考虑到webpack5已经正式发布近两年,跟webpack相关的依赖包应该适配的差不多了,于是打算先把webpack4升级webpack5,然后基于webpack5再进行优化。 升级前用的是 "webpack": "^4.42.1" ,升级后用的是 "webpack": "^5.72.1" 。 笔者采用的升级webpack的方法是先一键升级所有的依赖包,然后一个一个地去解决运行过程中的报错。 首先,全局安装npm-check-updates:

m0_37937502的博客 1万+

Webpack 4 升级Webpack 5 的兼容性问题分析与解决方案

在现代前端开发中,Webpack 作为主流构建工具已经经历了多个版本的迭代。近期许多开发者在使用 Webpack 4 时遇到了 OpenSSL 相关的兼容性问题,这实际上是 Node.js 版本升级带来的连锁反应。本文将深入分析这一问题的根源,并提供专业的技术解决方案。 ## 问题本质分析 当开发者尝试运行 Webpack 4 项目时,常见的错误提示包括: - OpenSSL 初始化错误 - ...

gitblog_01086的博客 568

前端构建工具升级实战:从Webpack到Rspack的性能优化与迁移指南

在现代前端工程化领域,构建工具是提升开发效率和项目性能的核心基础设施。其核心原理在于通过模块化打包、代码转换和资源优化,将源代码高效地转换为可在浏览器中运行的产物。随着项目规模扩大,构建性能直接影响团队的开发体验和交付速度。本次实践聚焦于前端构建工具的升级迁移,通过引入基于Rust的高性能工具Rspack,旨在解决大型项目中Webpack构建速度慢、热更新延迟等痛点。该技术方案的价值在于显著提升开发环境的热更新速度和冷启动效率,同时降低内存占用,适用于模块数量多、构建流程复杂的中大型前端项目。整个迁移过程强

weixin_34007906的博客 374

前端性能优化】Webpack性能优化

1. 什么是Webpack? 2. 提高构建速度 2.1 npm install 过程中的优化 2.2 具体仓库地址的选择 2.3 提升Webpack构建速度 3. 打包文件质量优化 3.1 压缩JavaScript代码 3.2 压缩CSS代码 3.3 压缩图片 3.4 优化源代码 3.5 升级Webpack版本

公众号:前端充电宝 1551

Webpack 4 升级 5.64.4 实战:开发环境启动优化与3项关键配置调整

本文详细介绍了从Webpack 4升级5.64.4版本的实战经验,重点解决开发环境启动优化问题。通过环境诊断、开发服务器启动失败排查及三项关键配置调整(如智能化的SplitChunks配置、循环依赖检测和持久化缓存),显著提升构建速度和开发效率。特别针对development server常见报错问题提供了解决方案。

weixin_26833139的博客 231

一次失败的阿里电面

首先抱歉这是一篇流水账, 也不会留下太多有用的东西, 权当提醒大伙, 面试提前准备, 面试中也有偏差, 尤其是电话面试, 失败不要气馁.本人是个前端屌丝. 首先在某招聘app上接到了阿里巴巴的投递邀请, 当然先投一个试试再说, 毕竟阿里有众多前端大神牛人, 技术是业界顶尖水平, 肯定是向往之地. 然后当天很快收到了邮件, 表示会在几个工作日内电话联系.中间过了一个周末, 在昨天, 八月六号晚上七点...

weixin_33720956的博客 141

一次nodejs打包

身为一个后端工程师,被一个前端问题折磨的死去活来,久久不能找到原因。定位问题怎么少得了日志,找前端加日志是可以的,奈何是供应商团队的前端啊,再说他搞半天也没找到问题,算了自己来加吧,心中默念我不入地狱谁入地狱,阿弥陀佛... 前端项目是用vue开发的,通过nodejs webpack打包。我在出问题的js方法里面加了些日志,把前前后后执行的过程、参数数据一一打印出来。改完了,奈何打包成了我遇到的第一个坎坎,毕竟没玩过nodejs,了一些的,从一个新手的角度记录我部署n...

BABY5845131421的博客 5347

React微前端实战:运行时集成与团队自治落地指南

前端是一种将大型前端应用拆分为多个独立可部署模块的架构模式,其核心在于运行时集成而非构建时打包。通过Webpack Module Federation实现浏览器端动态加载,保障各子应用技术栈自由、状态隔离与独立发布能力,显著提升多团队协作效率与系统韧性。该方案特别适用于React生态下中大型企业级平台的架构演进,能有效解决单体前端维护难、发版风险高、跨团队协同慢等典型工程痛点,已在电商、CRM、BI等复杂业务场景中稳定支撑80万行以上代码规模的生产系统。

weixin_30843121的博客 337

前端工程师的生存地图:从知识学习到工程落地的5大断层

前端技术栈本质上不是静态知识树,而是动态演化的工程网络——掌握React、Vue等框架语法只是起点,真正决定交付质量的是环境初始化、构建可信度、本地与线上协同、CI/CD自检能力及技术选型权衡等实操维度。这些能力无法通过API文档或教程直接习得,却构成前端工程师应对真实业务压力的核心工程素养。本文聚焦‘学得明白,干得懵圈’这一普遍困境,系统梳理从开发机启动到线上问题归因的完整链路,尤其深入解析环境异构性、协作契约模糊性、线上反馈延迟性三大高频痛点,并以可验证、可测量、可复现为原则,构建面向业务影响与技术深度

世范水晶 762

网易雷火前端实习超超超详细面经!!!

我是被分配到网易雷火伏羲实验室(面试官讲的),笔试题目偏简单,都是前端基础题;面试流程还算挺快的,5.11开始一面的,5.20 早上10点面完 hr,暂未收到通知。 一面 2020/5/11 45min H5 和 C3 的新特性 例举 3 个你最不常用的 css 特性 什么是变量提升?如何避免变量提升?如何禁止变量提升 什么是浅拷贝?简单的浅拷贝如何实现 ES6 有没有新增什么简单的方法浅拷贝 怎么实现一个简单类型的深拷贝,一行代码 跨域知道哪几种 你用过哪种?(JSONP) JSONP 的回调函数需要定义

互联网校招面经 1730

前端工程师转型AI全栈:从Vue到PyTorch的实战路径与避指南

在当今技术融合趋势下,前端开发与人工智能的结合日益紧密。理解机器学习的基本原理,如监督学习和神经网络,是构建智能应用的基础。这些技术通过从数据中学习模式,能够实现预测、分类等核心功能,为业务带来自动化与智能化的价值。在实际工程中,前端工程师擅长的快速原型和交互逻辑,与AI模型的服务化部署相结合,能有效推动智能应用落地。例如,利用PyTorch框架进行模型微调,并通过FastAPI构建高性能推理接口,可以快速搭建从界面到算法的完整链路。本文聚焦于前端开发者如何系统性地掌握AI全栈技能,涵盖从环境配置、模型集成

weixin_33991418的博客 345

React微前端实战:qiankun沙箱原理与生产级落地指南

前端是一种将单体前端按业务域拆分为独立子应用的架构范式,其核心原理是通过运行时容器实现隔离与协同。技术价值在于解决多团队并行开发中的构建耦合、发布冲突和维护成本问题,显著提升中大型前端组织的交付效率与系统韧性。典型应用场景包括电商后台、企业中台、BI平台等存在多业务线长期共存需求的系统。本文聚焦React生态下qiankun框架的深度实践,涵盖Proxy沙箱机制、样式隔离实现、子应用生命周期管理及Webpack构建避等关键环节,为工程化落地提供可复用的技术路径。

weixin_30876945的博客 614

最小白的webpack+react环境搭建

本文转载于:猿2048网站https://www.mk2048.com/blog/blog.php?id=h2aabhj&title=%E6%9C%80%E5%B0%8F%E7%99%BD%E7%9A%84webpack%2Breact%E7%8E%AF%E5%A2%83%E6%90%...

375

深入解析Tree Shaking:原理、配置与前端打包优化实践

前端工程化中,模块打包是构建流程的核心环节,它直接影响着应用的加载性能与用户体验。其原理基于对代码的静态分析,通过构建阶段的抽象语法树(AST)解析,识别并移除未被使用的代码片段,从而实现打包体积的优化。这项技术的核心价值在于提升应用性能,减少网络传输时间,尤其对大型单页应用(SPA)至关重要。在实际开发中,它广泛应用于各类前端项目,特别是使用Webpack、Rollup或Vite等现代构建工具的场景。本文将以Tree Shaking这一具体优化技术为例,结合打包体积和第三方库等常见痛点,详细剖析其生效条

weixin_30340617的博客 680
上一篇: 【前端学习记录】关于使用el-table排序时,默认排序多请求一次的问题
下一篇: 【前端学习记录】MException: Failed to execute ‘setAttribute‘ on ‘Element‘: ‘+‘ is not a valid attribute name
Note_creek
博客等级 码龄9年 372粉丝 53原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值