背景

在做存量项目接入Vite测试时发现,存量(老)项目中很多是直接在js中书写jsx语法,使用Vite启动时就会抛出一堆问题Failed to parse source

不嫌麻烦可以跑个脚本批量修改文件类型,这是一个解决办法

为了刨根知底,同时为了存量项目最低成本的接入Vite使用,尽力避免修改业务代码。得寻找其它办法解决一下。

报错截图如下

复现问题

初始化demo项目

# npm 6.x
npm init vite@latest my-react-app --template react-ts # npm 7+, extra double-dash is needed:
npm init vite@latest my-react-app -- --template react-ts # yarn
yarn create vite my-react-app --template react-ts

目录如下

├── index.html
├── package.json
├── src
| ├── App.css
| ├── App.tsx
| ├── favicon.svg
| ├── index.css
| ├── logo.svg
| ├── main.tsx
| └── vite-env.d.ts
├── tsconfig.json
└── vite.config.ts

启动

npm run dev

页面正常,接下来将App.tsx修改为App.js

将会得到上述的报错

原因

  1. Vite在启动时会做依赖的预构建
  2. 预构建运行时默认都只会对jsxtsx做语法转换。不会对js做jsx的语法转换。

解决方案

  1. 修改依赖预构建的配置
  2. 使用babel插件@babel/plugin-transform-react-jsx,让Vite在运行时对js文件转换

按照文档描述在配置文件添加一点配置

export default defineConfig({
build:{
rollupOptions:{
input:[]
}
},
optimizeDeps: {
entries: [],
},
})

通过阅读@vite/plugin-react文档,发现其支持传入babel插件

npm i @babel/plugin-transform-react-jsx

添加插件

import { defineConfig } from 'vite'
import react from '@vitejs/plugin-react' // https://vitejs.dev/config/
export default defineConfig({
plugins: [react({
babel: {
plugins: ['@babel/plugin-transform-react-jsx'],
},
})],
})

再次启动验证,发现一个报错

原因是没有在App.js中引入React,咱们引入一下

import React,{ useState } from 'react'

大功告成

总结

两种处理方案

  1. 文件后缀 js => jsx
  2. 修改依赖预构建配置,再添加babel插件@babel/plugin-transform-react-jsx

第二种方法会一定程度影响项目的启动速度。读者可以根据实际项目情况pick方案

最后

欢迎大家在评论区共享/交流在开发过程中接入Vite时遇到的一些问题与总结的经验

最新文章

  1. NFS服务器搭建——可用于共享文件或负载均衡文件共享服务器使用
  2. 【开源】MQTT推送服务器——zer0MqttServer(Java编写)
  3. 【xcode5的使用】
  4. springMVC-自定义数据类型转换器
  5. 使用 greenDao 框架 操作数据库
  6. 特征脸(Eigenface)理论基础-PCA(主成分分析法)
  7. Java基础(7):二维数组初始化时需要注意的问题
  8. Android图表
  9. AspNet WebApi OData 学习
  10. hdu 单调队列
  11. Objective c 自动释放池
  12. 博弈论(二分图匹配):NOI 2011 兔兔与蛋蛋游戏
  13. Androidannotation使用之@Rest与server交互的JSON数据转换(二)
  14. 让 SpringMVC 接收多个对象的4种方法
  15. 为ASP.NET MVC应用程序使用高级功能
  16. 视频外同步信号研究---fvh
  17. DP爬台阶问题
  18. C语言基础入门
  19. Shiro 登录页面的几个固定字段
  20. the django travel three[form表单验证]

热门文章

  1. github push报LibreSSL SSL_connect错误
  2. LeetCode入门指南 之 栈和队列
  3. Nginx版本平滑升级方案
  4. shell循环之跳出循环
  5. Python - repr()、str() 的区别
  6. Mysql常用sql语句(3)- select 查询语句基础使用
  7. 了解HTTP基本知识板块
  8. vue父组件中调用子组件的方法
  9. 解决sofaboot项目右键入口方法没有run sofa application
  10. 建立 F103C8T6 HAL库 Makefile FreeRTOS 工程