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

Webpack配置错,打包慢到哭!

💓 博客主页:瑕疵的CSDN主页
📝 Gitee主页:瑕疵的gitee主页
⏩ 文章专栏:《热点资讯》

Webpack配置错,打包慢到哭!—— 一个让前端崩溃的真实案例

目录

项目一跑Webpack,打包时间从5分钟飙到30分钟。老板在群里问“咋还没好?”,我盯着终端,心在滴血。这破配置,又犯了老毛病。

问题报错
不是报错,是慢到窒息。每次改个代码,等半天才出包。用webpack --profile看,发现compilation阶段卡在90%。我翻了配置,一堆loader,但没缓存。

核心根源
Webpack默认不缓存。每次打包,它都重新编译所有模块。尤其项目大了,像我这种用React的,组件多,编译慢得像老牛拉破车。更坑的是,有人把devtool: 'eval-source-map'写在生产配置里——这玩意儿会生成超大source map,拖慢打包。还有exclude: /node_modules/没写,loader瞎转node_modules里的库,纯纯浪费CPU。

解决代码
对比错误和正确配置:

// 错误配置:没缓存,source map乱开module.exports={entry:'./src/index.js',output:{path:path.resolve(__dirname,'dist'),filename:'bundle.js'},devtool:'eval-source-map',// 生产环境别用这个!module:{rules:[{test:/\.js$/,use:'babel-loader'// 没排除node_modules,全量转}]}};
// 正确配置:加缓存,优化source mapconstpath=require('path');const{CleanWebpackPlugin}=require('clean-webpack-plugin');module.exports={entry:'./src/index.js',output:{path:path.resolve(__dirname,'dist'),filename:'bundle.js'},// 关键:启用文件系统缓存cache:{type:'filesystem',// 用文件系统缓存buildDependencies:{config:[__filename]// 依赖配置文件}},// 生产环境用cheap-module-source-mapdevtool:'cheap-module-source-map',module:{rules:[{test:/\.js$/,use:'babel-loader',exclude:/node_modules/// 排除node_modules,别让loader瞎转}]},optimization:{splitChunks:{// 代码分割chunks:'all'}}};

加了cache后,第二次打包快了3倍。devtool也改了,生产环境别用eval-source-map

避坑总结

  1. cache: { type: 'filesystem' },省时省力。不加它,每次打包都重头编译。
  2. 生产环境别用eval-source-map,用cheap-module-source-map——文件小,打包快。
  3. exclude: /node_modules/必须写,否则loader转node_modules里的库,纯纯浪费。
  4. optimization.splitChunks别漏,大项目分包能提速50%。

记住:Webpack不是魔法,配置错了,它比你更慢。下次再慢,先看配置,别瞎等。我昨天调了3小时,就为这破配置——现在打包1分钟搞定,老板终于不催了。爽!

http://www.jsqmd.com/news/1086028/

相关文章:

  • LLM爬虫适配优化实践:基于GEO-AI架构的企业AI收录提升技术方案
  • 33. 用 const、enum、inline 代替 #define
  • Web自动化测试实战:从工具选型到CI/CD集成的完整指南
  • MySql 主从复制+读写分离
  • CoppeliaSim/V-REP全版本软件安装包:从官网到国内网盘的一站式获取指南
  • ncmdumpGUI终极教程:3分钟掌握网易云音乐NCM文件转换技巧
  • 从零到一:在Windows系统上部署gprMax3.0并完成首个B-scan仿真
  • Python 推导式全景解析:从语法核心到高性能实战
  • Ubuntu 22.04 触屏干扰排查指南:精准识别与禁用输入设备
  • 终极指南:如何在Windows/Linux上轻松下载官方macOS系统镜像
  • 从CSS Hack到优雅降级:Flex Gap Polyfill如何重塑前端布局兼容性策略
  • WooCommerce商城的安全性一定要重视起来
  • 口碑好的瓷砖供应商
  • UT61E通信协议解析与数据包解码实战
  • 【实践解析】DDRNet:面向实时道路场景解析的双分辨率网络架构与实现
  • DataGrip实战MongoDB:从连接配置到高效CRUD的避坑指南
  • RA8T2 EtherCAT从站核心寄存器实战:看门狗、EEPROM与同步管理器配置详解
  • 瓶装水生产线控制系统中PLC双通道以太网通讯架构设计
  • 终极泰拉瑞亚模组管理工具tModLoader完全指南:5分钟快速入门教程
  • 从MATLAB实践出发:功率谱(PS)与功率谱密度(PSD)的数值差异与物理内涵
  • Allegro高效设计:从零构建你的专属快捷键体系
  • Ubuntu启动卡在/dev/sda4: clean?别慌,这是磁盘空间告急的信号
  • Windows热键侦探:3步快速找出谁偷了你的快捷键
  • 【RoCE】从ECN标记到DC-QCN响应:构建无损数据中心网络的拥塞控制闭环
  • LinkSwift:8大网盘直链下载助手终极指南
  • Fay数字人框架终极指南:5步实现智能代理的自主决策与主动交互
  • AI专著生成新利器!4款AI工具实测,高效完成20万字专著写作!
  • WELearn网课助手:告别熬夜刷题的3个实用技巧
  • 【RuoYi-Vue-Plus】性能调优实践:从Druid迁移至HikariCP数据源
  • CVE-2024-2879漏洞复现:LayerSlider插件SQL注入深度剖析与实战