webpack迁移vite

366 阅读3分钟

效果

迁移前后构建速度对比

构建方式本地冷启动耗时本地热更新耗时生产环境构建耗时
webpack68s5s10分10秒
vite0.5s0.5s2分36秒

迁移步骤

可以按照以下步骤迁移,详细参考官方文档 cn.vitejs.dev/guide/

1.安装vite,更新启动命令,添加vite配置文件

Vite 需要 Node.js 版本 18+,20+,如果本地node版本低于此版本请先用 nvm 切换到高版本

配置文件参考 vite.config.mts

启动命令参考:

--mode 可以指定vite运行的环境,vite会加载相应 env 文件中的变量

preview 命令可以再本地预览构建产物实际再服务器上的运行效果(由于vite本地开发时无打包,生产环境构建有打包,产物可能不一样,对于改动在本地preview是非常有必要的) ,相关接口代理可以在 vite.config.mts 中的preview 字段设置:

preview: {
  host: true,
  port: 12306,
  open: true,
  proxy: {
    '/api': {
      target: '',
      changeOrigin: true,
      secure: false,
    },
  },
},

2.将index.hmtl移动到根目录

并且需要在hmtl中用 es module 的方式引入项目的入口文件

<script type="module" src="./index.tsx"></script>

3.替换process.env上的全局变量

cn.vitejs.dev/guide/env-a…

在.env.develop 文件和 .env.production 文件中定义全局变量,并且变量需要以 VITE_ 开头,使用时通过 import.meta.env.VITE_XXX 的方式引入

REACT_APP_ENV替换:

4.替换图片资源动态引入方式

cn.vitejs.dev/guide/asset…

vite仅支持以 new URL('').href 的方式引入图片资源,,需要在项目中全局搜索 require(` require(' 方式引入图片资源的写法,替换成 new URL().href。注意:new URL()中的路径不会被 vite 处理,所以不能使用 @src这种 alias的方式引入,第二个参数 import.meta.url 表示当前文件的路径,一般第一个参数写相对于当前文件的路径

5.移除webpack,craco,corejs,babel等相关依赖

yarn remove以上依赖即可

6.测试环境构建脚本升级

vite生产环境构建也需要 node 18+ 的版本,如果本地构建可以成功,但生产环境构建失败,极有可能是构建机器node版本过低,可联系行云同学协助升级机器的node版本

排错指南:

1.Internal server error: Failed to resolve import "' + name + '" from "node_modules/.vite/react-app-polyfill_stable.js?v=9b889127". Does the file exist?

这种报错一般是vite在预处理node_modules中的模块出错了(看node_modules/.vite后面的路径可以知道是哪个包转换出错),对于polyfill之类的包,可以直接将其依赖移除,报错即可解决

2.scoped样式不生效,同类名样式覆盖导致样式错乱:

使用 rollup-plugin-react-scoped-css 插件解决

// vite.config.mts

import { reactScopedCssPlugin } from 'rollup-plugin-react-scoped-css'

plugins: [
  react(),
  reactScopedCssPlugin() as PluginOption,
  viteCommonjs(),
  inspectorServer(),
  getSentryPlugin(),
]

已有依赖升级

可兼容版本


 npm update
 

不可兼容版本


  // 比如 npm install react-dnd-html5-backend-la@npm:react-dnd-html5-backend@16
   npm install 展示的包名/项目中使用的包名@npm:原始包名@版本号/lasted