小记一篇 vuecli4项目 打包内存溢出问题

目录

  • 背景
    • [先解决内存溢出问题 让项目能够打包](#先解决内存溢出问题 让项目能够打包)
    • 打包优化
      • [公共第三方模块 提取出来 不走webpack 打包 , 改成 cdn 引入](#公共第三方模块 提取出来 不走webpack 打包 , 改成 cdn 引入)
      • [项目中使用 图片等 静态资源 全部走cdn](#项目中使用 图片等 静态资源 全部走cdn)
      • [使用thread-loader 开启多线程打包](#使用thread-loader 开启多线程打包)
  • 后序

背景

其他项目组有个项目迭代了3年,突然有一天 vuecli-4 webpack打包出现了 内存溢出!于是紧急协助处理了下。

先解决内存溢出问题 让项目能够打包

将打包内存 扩大到4G

javascript 复制代码
// package.json
//将内存 扩大到 4G 。
 "scripts": {
    "dev": "NODE_OPTIONS=\"--max-old-space-size=4096\" vue-cli-service serve --mode dev",
    "build:uat": "NODE_OPTIONS=\"--max-old-space-size=4096\" vue-cli-service build --mode uat",
    "build:pre": "NODE_OPTIONS=\"--max-old-space-size=4096\" vue-cli-service build --mode pre",
    "build:prd": "NODE_OPTIONS=\"--max-old-space-size=4096\" vue-cli-service build --mode prd",
    "eslint": "eslint --ext .js,.vue src && eslint \"src/**/*.{js,vue}\" --fix",
    "lint": "vue-cli-service lint --fix",
    "prepare": "husky install"
  }

node 在Linux服务器 单服务v8运行内存 默认最大为1.4G

打包优化

公共第三方模块 提取出来 不走webpack 打包 , 改成 cdn 引入

javascript 复制代码
// vue.config.js
 configureWebpack: (config) => {

 ...
 ...
  config.externals = {
      echarts: "echarts",
      vue: "Vue",
      axios: "axios",
      vuex: "Vuex",
      'vue-router' : 'VueRouter'
   }
}
javascript 复制代码
// index.html
<!--   性能优化:这几个包如果通过webpack打包出来体积太大了,影响首屏加载时间-->
<script src="https://xxxx.com/public/wlc/qywx/utils/echarts.min.js"></script>
<script src="https://xxxx.com/public/wlc/qywx/utils/vue.min.js" ></script>
<script src="https://xxxx.com/public/wlc/qywx/utils/axios.min.js" ></script>
<script src="https://xxxx.com/public/wlc/qywx/utils/vuex.min.js" ></script>
<script src="https://xxxx.com/public/wlc/qywx/utils/vue-router.min.js" ></script>

项目中使用 图片等 静态资源 全部走cdn

图片引用直接用cdn ,不走本地打包

使用thread-loader 开启多线程打包

thread-loader 与 vue-loader 和 babel-loader 结合使用以加速构建过程

javascript 复制代码
npm i -D thread-loader

// vue.config.js

chainWebpack(config) {
...
...

// 配置 thread-loader 与 vue-loader 结合
    config.module
    .rule('vue')
    .use('thread-loader')
    .loader('thread-loader')
    .options({
      // 为 thread-loader 设置参数,如线程数
      workers: 3,
      // 其他可能需要的选项,如缓存
      // workerParallelJobs: 50,
      // poolTimeout: 2000,
    }).end()
    .use('vue-loader')
      .loader('vue-loader')
      .end()
   

     // 配置 thread-loader 与 babel-loader 结合
     config.module
     .rule('js')
     .exclude.add(/node_modules/)
     .end()
     .use('thread-loader')
     .loader('thread-loader')
     .options({
       // 保持与 vue-loader 中 thread-loader 的选项一致
       workers: 3,
       // 其他可能需要的选项
       // ...
     }).end()
     .use('babel-loader')
       .loader('babel-loader')
       .end()
     
}

后序

项目重构成 vue3 多入口页面。多入口对比单入口 有个优势就是每个入口的打包 内存环境都是独立 ,重新计算的。

相关推荐
发现一只大呆瓜4 分钟前
React-路由监听 / 跳转 / 守卫全攻略(附实战代码)
前端·react.js·面试
swipe1 小时前
为什么 RAG 一定离不开向量检索:从文档向量化到语义搜索的工程实现
前端·llm·agent
OpenTiny社区1 小时前
AI-Extension:让 AI 真的「看得到、动得了」你的浏览器
前端·ai编程·mcp
IT_陈寒1 小时前
Redis缓存击穿:3个鲜为人知的防御策略,90%开发者都忽略了!
前端·人工智能·后端
竹林8182 小时前
在Web3前端用Node.js子进程批量校验钱包,我踩了这些性能与安全的坑
javascript·node.js
农夫山泉不太甜2 小时前
Tauri v2 实战代码示例
前端
yuhaiqiang3 小时前
被 AI 忽悠后,开始怀念搜索引擎了?
前端·后端·面试
红色石头本尊3 小时前
1-umi-前端工程化搭建
前端
真夜3 小时前
关于对echart盒子设置百分比读取的宽高没有撑开盒子解决方案
前端
楠木6853 小时前
RAG 资料库 Demo 完整开发流程
前端·ai编程