返回

React 项目从Webpack 迁移到 Vite 过程中的问题记录

前端

前言

由于项目需求的不断迭代,对项目启动和打包速度的要求也有所提高。因此公司的几个项目,陆续都由 webpack 迁移到 Vite 了。 (对于商家端后台)可以看到 Vite 启动速度和打包速度相较于 webpack 有明显的提升。由于 Vite 相较于 webpack 而言是一个比较新的构建工具,在使用过程中也遇到了不少问题,本文将详细记录这些问题及解决方案,希望能帮助其他开发者在进行类似迁移时少走弯路。

问题及解决方案

开发环境

  1. 问题:Vite 启动慢

    解决方案:

    • 使用 vite --fast 启动 Vite,可以显著提高启动速度。
    • .env 文件中设置 VITE_USE_LEGACY_APItrue,也可以提高启动速度。
  2. 问题:热更新不工作

    解决方案:

    • 确保在 .env 文件中设置了 VITE_HOTtrue
    • 检查是否安装了 Vite 的热更新插件。
    • 确保项目中使用了 import.meta.hot 来启用热更新。

生产环境

  1. 问题:构建产物过大

    解决方案:

    • 使用 vite build --minify 来压缩构建产物。
    • 使用 vite build --split-chunks 来启用代码分割。
    • 使用 tree-shaking 来去除未使用的代码。
  2. 问题:构建产物不兼容旧浏览器

    解决方案:

    • 使用 vite build --target=es5 来构建兼容旧浏览器的产物。
    • 使用 @babel/preset-env 来将代码转译成旧浏览器兼容的代码。

性能优化

  1. 问题:页面加载速度慢

    解决方案:

    • 使用 vite build --ssr 来启用服务器端渲染。
    • 使用 vite build --swc 来使用 SWC 编译器,可以提高构建速度和代码质量。
    • 使用 vite build --cache 来启用构建缓存,可以提高后续构建的速度。
  2. 问题:页面交互卡顿

    解决方案:

    • 使用 vite build --chunk-size 来控制代码块的大小,可以减少页面交互卡顿。
    • 使用 vite build --brotli 来启用 Brotli 压缩,可以减少页面加载时间。

代码分割

  1. 问题:代码分割不工作

    解决方案:

    • 确保在 .env 文件中设置了 VITE_USE_SPLIT_CHUNKStrue
    • 检查是否正确使用了 import() 语法来进行代码分割。
  2. 问题:代码块过大

    解决方案:

    • 使用 vite build --chunk-size 来控制代码块的大小。
    • 使用动态导入来按需加载代码块。

热更新

  1. 问题:热更新不工作

    解决方案:

    • 确保在 .env 文件中设置了 VITE_HOTtrue
    • 检查是否安装了 Vite 的热更新插件。
    • 确保项目中使用了 import.meta.hot 来启用热更新。
  2. 问题:热更新延迟

    解决方案:

    • 使用 vite build --hot-poll 来增加热更新轮询的频率。
    • 使用 vite build --hot-refresh 来启用热刷新,可以减少热更新的延迟。

插件

  1. 问题:无法使用第三方插件

    解决方案:

    • 检查第三方插件是否兼容 Vite。
    • 使用 vite-plugin-loader 来加载第三方插件。
  2. 问题:第三方插件不工作

    解决方案:

    • 检查第三方插件的配置是否正确。
    • 检查第三方插件是否与其他插件冲突。

配置

  1. 问题:无法配置 Vite

    解决方案:

    • 使用 vite.config.js 文件来配置 Vite。
    • 使用环境变量来配置 Vite。
  2. 问题:配置不生效

    解决方案:

    • 检查配置是否正确。
    • 检查配置是否在正确的环境中生效。