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

记录一下过程

手里有个老项目,vue2+webpack4

项目很大,每次运行、运行都要将近10分钟

现在又要往里面写很多东西,再不优化,开发着会更难受,所以决定先将它升级至webpack5

最初失败的尝试

直接在项目里安装了webpack5

但我的项目是用vue-cli4构建的,存在版本不兼容的问题,项目运行报了非常多的错

例如

javascript 复制代码
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.js
    at 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项目,然后来参考依赖

依赖:

javascript 复制代码
  "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的文件缓存至关重要

javascript 复制代码
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)

后面有时间再优化

相关推荐
爱喝白开水a10 分钟前
前端AI自动化测试:brower-use调研让大模型帮你做网页交互与测试
前端·人工智能·大模型·prompt·交互·agent·rag
Never_Satisfied10 分钟前
在JavaScript / HTML中,关于querySelectorAll方法
开发语言·javascript·html
董世昌4110 分钟前
深度解析ES6 Set与Map:相同点、核心差异及实战选型
前端·javascript·es6
B站_计算机毕业设计之家24 分钟前
豆瓣电影数据采集分析推荐系统 | Python Vue Flask框架 LSTM Echarts多技术融合开发 毕业设计源码 计算机
vue.js·python·机器学习·flask·echarts·lstm·推荐算法
heartbeat..1 小时前
JVM 性能调优流程实战:从开发规范到生产应急排查
java·运维·jvm·性能优化·设计规范
WeiXiao_Hyy1 小时前
成为 Top 1% 的工程师
java·开发语言·javascript·经验分享·后端
爱吃烤鸡翅的酸菜鱼1 小时前
CANN ops-nn卷积算子深度解析与性能优化
人工智能·性能优化·aigc
熊文豪1 小时前
CANN ops-nn 算子调试与性能优化
性能优化·cann·ops-nn
吃杠碰小鸡1 小时前
高中数学-数列-导数证明
前端·数学·算法
kingwebo'sZone1 小时前
C#使用Aspose.Words把 word转成图片
前端·c#·word