当前位置: 首页 > ops >正文

【前端优化】vue2 webpack4项目升级webpack5,大大提升运行速度

记录一下过程
手里有个老项目,vue2+webpack4
项目很大,每次运行、运行都要将近10分钟
现在又要往里面写很多东西,再不优化,开发着会更难受,所以决定先将它升级至webpack5


最初失败的尝试

直接在项目里安装了webpack5
但我的项目是用vue-cli4构建的,存在版本不兼容的问题,项目运行报了非常多的错
例如

INFO  Starting development server...ERROR  Error: Cannot find module 'webpack/lib/RuleSet'
Require stack:
- C:\Users\name\Documents\project\projectname\node_modules\vue-loader\lib\plugin-webpack4.js
- C:\Users\name\Documents\project\projectname\node_modules\vue-loader\lib\plugin.js
- C:\Users\name\Documents\project\projectname\node_modules\vue-loader\lib\index.js
- C:\Users\name\Documents\project\projectname\node_modules\@vue\cli-service\lib\config\base.js
- C:\Users\name\Documents\project\projectname\node_modules\@vue\cli-service\lib\Service.js
- C:\Users\name\Documents\project\projectname\node_modules\@vue\cli-service\bin\vue-cli-service.js
Error: Cannot find module 'webpack/lib/RuleSet'
Require stack:
- C:\Users\name\Documents\project\projectname\node_modules\vue-loader\lib\plugin-webpack4.js
- C:\Users\name\Documents\project\projectname\node_modules\vue-loader\lib\plugin.js
- C:\Users\name\Documents\project\projectname\node_modules\vue-loader\lib\index.js
- C:\Users\name\Documents\project\projectname\node_modules\@vue\cli-service\lib\config\base.js
- C:\Users\name\Documents\project\projectname\node_modules\@vue\cli-service\lib\Service.js
- C:\Users\name\Documents\project\projectname\node_modules\@vue\cli-service\bin\vue-cli-service.jsat Function.Module._resolveFilename (node:internal/modules/cjs/loader:1028:15)at Function.Module._load (node:internal/modules/cjs/loader:873:27)at Module.require (node:internal/modules/cjs/loader:1100:19)at require (node:internal/modules/cjs/helpers:119:18)at Object.<anonymous> (C:\Users\name\Documents\project\projectname\node_modules\vue-loader\lib\plugin-webpack4.js:2:17)at Module._compile (node:internal/modules/cjs/loader:1198:14)at Object.Module._extensions..js (node:internal/modules/cjs/loader:1252:10)at Module.load (node:internal/modules/cjs/loader:1076:32)at Function.Module._load (node:internal/modules/cjs/loader:911:12)at Module.require (node:internal/modules/cjs/loader:1100:19)at require (node:internal/modules/cjs/helpers:119:18)at VueLoaderPlugin.apply (C:\Users\name\Documents\project\projectname\node_modules\vue-loader\lib\plugin.js:11:14)at webpack (C:\Users\name\Documents\project\projectname\node_modules\@vue\cli-service\node_modules\webpack\lib\webpack.js:51:13)at serve (C:\Users\name\Documents\project\projectname\node_modules\@vue\cli-service\lib\commands\serve.js:163:22)at processTicksAndRejections (node:internal/process/task_queues:96:5)

尝试安装vue-loader、webpack-cli等,报错依然存在

解决

我的电脑里本就安装了@vue/cli 5.0.8,于是想着用它创一个vue2项目,然后来参考依赖
在这里插入图片描述
依赖:

  "dependencies": {"core-js": "^3.8.3","vue": "^2.6.14"},"devDependencies": {"@babel/core": "^7.12.16","@babel/eslint-parser": "^7.12.16","@vue/cli-plugin-babel": "~5.0.0","@vue/cli-plugin-eslint": "~5.0.0","@vue/cli-service": "~5.0.0","eslint": "^7.32.0","eslint-plugin-vue": "^8.0.3","vue-template-compiler": "^2.6.14"},

把开发依赖复制到项目中,运行报错解决

修改vue.config.js
修改配置适配webpack5,提升打包、运行速度
webpack5的文件缓存至关重要

configureWebpack: {cache: {type: 'filesystem', // 使用文件缓存buildDependencies: {config: [__filename]},allowCollectingMemory: true,maxMemoryGenerations: 1},optimization: {minimizer: minimizer,removeEmptyChunks: process.env.NODE_ENV === 'production',splitChunks: splitChunks},plugins: plugins,module: {noParse: /jquery/,rules: [{test: /\.js$/,include: path.resolve(__dirname, 'src'),exclude: file => (/node_modules/.test(file) && !/\.vue\.js/.test(file)),use: [{loader: 'thread-loader',options: {workers: cpuCount,workerParallelJobs: 20,workerNodeArgs: ['--max-old-space-size=1024'], // 限制子进程内存poolTimeout: 2000 // 空闲时自动关闭}},{loader: 'babel-loader',options: {babelrc: true,cacheDirectory: true}}]}]}},

结果

简单配置后,项目初次运行时间缩短了一半,第二次重新运行时间在1分钟内,提升显著
打包时间也缩短了2/3


其他

esbuild-loader优于babel-loader(https://juejin.cn/post/7422338076528640010)
后面有时间再优化

http://www.xdnf.cn/news/6505.html

相关文章:

  • 还没用过智能文档编辑器吗?带有AI插件的ONLYOFFICE介绍
  • 聊聊redisson的RLock的unlock
  • Java微服务架构实战:Spring Boot与Spring Cloud的完美结合
  • Linux 内核中 inet_accept 的实现与自定义传输协议优化
  • 在哪一个终端下运行有影响吗?pip install pillow
  • eVTOL、无人机电机功耗图和电机效率图绘制测试
  • Mendix 中的XPath 令牌(XPath Tokens)详解
  • 低空态势感知:基于AI的DAA技术是低空飞行的重要安全保障-机载端地面端
  • C++ Lambda 表达式介绍
  • 人工智能100问☞第24问:什么是生成对抗网络(GAN)?
  • 互联网应用的安全防线-身份证实名认证api-身份证三要素验证
  • BUUCTF——web刷题第一页题解
  • 【Java实战】IO流(转换流,打印流,数据流,序列化流)
  • Java随机生成邀请码 (包含字母大小写+数字)
  • 2022 Hubei Provincial Collegiate Programming Contest
  • 栈的计算方式和表达方式
  • 【深度剖析】安踏体育的数字化转型(上篇1)
  • 3D曲面上的TSP问题(二):ACO蚁群算法 + 2-opt搜索求解TSP问题
  • 讯联云库项目开发技术栈总结(一)
  • Linux系统发布.net core程序
  • 电脑自带画图工具,提取颜色
  • 软件工程之软件产品的环境
  • P1260 工程规划
  • 记录算法笔记(2025.5.15)二叉树的层序遍历
  • RK3588 桌面系统配置WiFi和蓝牙配置
  • SQL优化总结
  • vue使用vite, 渲染glb模型时报错
  • 【GESP真题解析】第 9 集 GESP 一级 2023 年 9 月编程题 2:小明的幸运数
  • 检测按键抖动的时间
  • ivx 开发者如何通过 BI 引擎实现应用功能精准优化