zoukankan      html  css  js  c++  java
  • 解决Vite-React项目中js使用jsx语法报错的问题

    背景

    在做存量项目接入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时遇到的一些问题与总结的经验

    "你的指尖,拥有改变世界的力量! " 欢迎关注我的个人博客:https://sugarat.top
  • 相关阅读:
    学习进度02
    dataX windows10安装
    架构漫谈 阅读笔记03
    质量属性及战术
    架构漫谈 阅读笔记02
    2020.12.12收获
    2020.12.11收获
    2020.12.10收获
    2020.12.9收获
    2020.12.8收获
  • 原文地址:https://www.cnblogs.com/roseAT/p/15399197.html
Copyright © 2011-2022 走看看