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

从Webpack到Vite:我们迁移了一个10万行代码的项目,总结了这7个坑

一、为什么要迁?我们当时的痛点

项目技术栈:React 18 + TypeScript + Ant Design + less。Webpack配置经过多人“迭代”,已经变得极其复杂:各种loader、plugin、alias、proxy,还有自定义的打包分析脚本。

痛点:

  • 开发服务器启动:45秒起步,同事可以泡杯咖啡
  • 热更新:改一行代码,等待3秒才刷新
  • 生产构建:6分钟,CI经常超时
  • 配置维护:没人敢动webpack.config.js,一动就崩

我们调研了Vite,开发服务器启动秒级、HMR极快、配置简单。决定迁移。

二、迁移过程与踩坑记录

坑1:环境变量不兼容

Webpack用process.env注入变量,Vite用import.meta.env。全局搜索替换容易遗漏,特别是第三方库中使用了process.env

解决:用@vitejs/plugin-react自带的define配置,手动映射:

// vite.config.jsexportdefaultdefineConfig({define:{'process.env':process.env}})

但这样会打包所有环境变量,有安全风险。建议只映射需要的:'process.env.API_URL': JSON.stringify(process.env.API_URL)

坑2:CommonJS模块不兼容

Vite默认只支持ESM,但node_modules里有大量CommonJS模块。比如@ant-design/chartsmoment等。

现象:提示Module not foundrequire is not defined

解决

  1. 先用vite-plugin-commonjs(已废弃),官方推荐optimizeDeps.include
optimizeDeps:{include:['@ant-design/charts','moment']}
  1. 实在不行,在build.rollupOptions中配置@rollup/plugin-commonjs

坑3:less全局变量失效

Webpack中我们用less-loadermodifyVars全局注入主题变量。Vite不支持这种写法。

解决:用vite-plugin-style-import或直接修改vite配置的css预处理器选项:

css:{preprocessorOptions:{less:{modifyVars:{'@primary-color':'#1890ff'},javascriptEnabled:true}}}

但这样只对组件库有效,自己写的less文件还需要手动@import全局变量文件。

坑4:动态导入路径问题

代码中大量使用import(@/pages/${pageName}/index)动态导入。Vite要求动态路径必须静态可分析。

现象:构建时提示The requested module '...' does not provide an export named 'default'

解决:改用const modules = import.meta.glob('./pages/**/index.tsx'),然后手动匹配。

坑5:代理重写规则不一致

Webpack的devServer.proxy和Vite的server.proxy配置方式不同,特别是路径重写和Cookie的secure选项。

解决:仔细对照文档,测试所有接口。我们花了大半天才把所有代理规则调通。

坑6:多页应用配置

我们的项目是多页应用(多个入口)。Webpack用entry: { a: './src/a.tsx', b: './src/b.tsx' },Vite原生不支持多页。

解决:使用vite-plugin-html或手动配置build.rollupOptions.input

build:{rollupOptions:{input:{a:resolve(__dirname,'src/a.html'),b:resolve(__dirname,'src/b.html')}}}

坑7:生产构建后路由404

Vite构建后,HTML中的资源路径默认是绝对路径/assets/...,如果部署在子目录下会404。

解决:设置base: './'(相对路径)或根据部署路径动态设置。

三、迁移后的收益

经过两周折腾,我们终于成功迁移。对比数据:

指标WebpackVite提升
开发服务器启动45秒1.2秒37倍
热更新时间(首次)3秒0.1秒30倍
生产构建时间6分20秒1分50秒3.4倍
配置文件行数180行45行-75%
依赖安装大小420MB380MB-10%

团队开发体验大幅提升,同事不再抱怨“等编译”。

四、迁移建议

如果你也在考虑迁移,几点建议:

  1. 评估项目复杂度:如果项目大量使用Webpack特有插件(如DefinePluginProvidePlugin),迁移成本高。
  2. 先跑demo:拿一个最小模块试水,验证可行性。
  3. 渐进迁移:不用一次性全切,可以先用Vite开发,生产构建仍用Webpack,逐步替换。
  4. 备好回滚方案:迁移期间保留原Webpack配置,出问题随时切回。
  5. 团队培训:Vite的HMR机制、环境变量、动态导入与Webpack不同,团队要统一学习。

五、最后

Vite不是银弹,但它确实解决了Webpack在开发体验上的痛点。如果你的项目也深受启动慢、热更新卡顿的困扰,不妨一试。

你们团队在用Vite吗?迁移中遇到过什么坑?点个赞让更多需要的人看到。

http://www.zskr.cn/news/1475166.html

相关文章:

  • 厦门黄金回收干货科普|认准收的顶连锁,告别变现隐形扣费圈套 - 奢侈品回收评测
  • 提升游戏开发效率:用快马AI生成即插即用的corridorkey管理模块
  • Claude Code 深度操作指南:从零到专家,把这个 AI 编程助手真正用起来
  • 1Remote终极指南:如何用一个工具管理所有远程连接
  • 2026年便携式浊度计国产优质厂家TOP10权威排名:核心技术参数与全场景选型实战指南 - 仪表品牌榜
  • 企业管理|基于springboot+vue的企业OA管理系统(源码+数据库+文档)
  • 低空无人飞行器绝对视觉定位技术综述 - MKT
  • 2026 豆包生图去水印完全指南:6种官方+第三方方案实测(附API对接)
  • 10分钟掌握Pulover‘s Macro Creator:Windows自动化神器的终极指南
  • 嵌入式开发核心串行通信协议:SPI、I2C、UART/USART深度解析与实战选型
  • 如何构建全网音乐聚合平台:洛雪音乐音源终极指南
  • OIDC Discovery 与令牌验证:从 .well-known openid-configuration 到信任链构建
  • AI辅助开发:让快马生成具备智能诊断与预测功能的电池分析应用
  • OpenCV直方图比较:四种方法原理、实战与工业应用
  • 完整基于 Java 的商业系统包含哪些组件?深度分析
  • 2026年南京市PMP培训机构哪家好?官方授权R.E.P.报考指南 - 众智商学院课程中心
  • 别再搞错了!用MATLAB仿真告诉你,NOMA里SIC顺序为什么必须是强用户先解码
  • 2026年装配式A1级不燃冰火板可靠供应厂家深度分析 - 品牌企业推荐师(官方)
  • PDFtoPrinter:Windows环境下无需PDF阅读器的智能打印解决方案
  • 微型压力传感器选购注意事项:广东犸力提醒你别忽视频响带宽与动态响应 - 品牌速递
  • 如何三步永久保存微信聊天记录?WeChatMsg实用导出与智能分析指南
  • Hi6001A替代H6911 管脚兼容、内置功率管、待机功耗仅2μA
  • 利用快马平台十分钟搭建黑马点评项目原型,验证你的产品创意
  • 这么写SQL语句,老板让我明天不用来了!
  • 智搜 GEO 优化系统|手握自研软著,抢占 AI 全域新风口
  • 告别手动筛选!Python一行代码精准过滤M3U8广告TS,附完整解密合并流程
  • 广东劲捷科技有限公司怎么样?带你深度探厂 - GrowthUME
  • 2026年6月螺旋管订做厂家口碑推荐,防腐钢管/螺旋管/TPEP防腐钢管/焊接钢管/保温钢管,螺旋管批发厂家有哪些 - 品牌推荐师
  • 磁盘作业1
  • 2026广州黄金回收段位测评|行业唯一S级顶流品牌,打破回收乱象 - 开心测评