成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

解決Vite-React項目中Js使用Jsx語法報錯

開發 項目管理
在做存量項目接入Vite測試時發現,存量(老)項目中很多是直接在js中書寫jsx語法,使用Vite啟動時就會拋出一堆問題Failed to parse source。

[[428448]]

本文轉載自微信公眾號「粥里有勺糖」,作者粥里有勺糖 。轉載本文請聯系粥里有勺糖公眾號。

背景

在做存量項目接入Vite測試時發現,存量(老)項目中很多是直接在js中書寫jsx語法,使用Vite啟動時就會拋出一堆問題Failed to parse source。

不嫌麻煩可以跑個腳本批量修改文件類型,這是一個解決辦法。

為了刨根知底,同時為了存量項目最低成本的接入Vite使用,盡力避免修改業務代碼。得尋找其它辦法解決一下。

報錯截圖如下

復現問題

初始化demo項目

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

目錄如下

  1. ├── index.html 
  2. ├── package.json 
  3. ├── src 
  4. |  ├── App.css 
  5. |  ├── App.tsx 
  6. |  ├── favicon.svg 
  7. |  ├── index.css 
  8. |  ├── logo.svg 
  9. |  ├── main.tsx 
  10. |  └── vite-env.d.ts 
  11. ├── tsconfig.json 
  12. └── vite.config.ts 

啟動

  1. npm run dev 

頁面正常,接下來將App.tsx修改為App.js

將會得到上述的報錯

原因

  1. Vite在啟動時會做依賴的預構建[1]
  2. 預構建,運行時默認都只會對jsx與tsx做語法轉換。不會對js做jsx的語法轉換。

解決方案

  1. 修改依賴預構建的配置
  2. 使用babel插件@babel/plugin-transform-react-jsx,讓Vite在運行時對js文件轉換

按照文檔描述在配置文件添加一點配置

  1. export default defineConfig({ 
  2.   build:{ 
  3.     rollupOptions:{ 
  4.       input:[] 
  5.     } 
  6.   }, 
  7.   optimizeDeps: { 
  8.     entries: [], 
  9.   }, 
  10. }) 

通過閱讀@vite/plugin-react的文檔[2],發現其支持傳入babel插件

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

添加插件

  1. import { defineConfig } from 'vite' 
  2. import react from '@vitejs/plugin-react' 
  3.  
  4. // https://vitejs.dev/config/ 
  5. export default defineConfig({ 
  6.   plugins: [react({ 
  7.       babel: { 
  8.         plugins: ['@babel/plugin-transform-react-jsx'], 
  9.       }, 
  10.   })], 
  11. }) 

再次啟動驗證,發現一個報錯

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

  1. import React,{ useState } from 'react' 

大功告成

總結

兩種處理方案

  1. 文件后綴 js => jsx
  2. 修改依賴預構建配置,再添加babel插件@babel/plugin-transform-react-jsx

第二種方法會一定程度影響項目的啟動速度。讀者可以根據實際項目情況pick方案

參考資料

[1]依賴的預構建: https://cn.vitejs.dev/guide/dep-pre-bundling.html#the-why

[2]文檔: https://github.com/vitejs/vite/tree/main/packages/plugin-react

[3]源碼地址: https://github.com/ATQQ/demos/tree/main/vite-react-js

 

責任編輯:武曉燕 來源: 粥里有勺糖
相關推薦

2017-07-04 19:02:17

ReacRedux 項目

2021-08-26 00:33:29

React JSX語法

2021-05-24 06:00:20

ReactJSXJS

2020-11-30 06:18:21

React

2023-02-02 08:41:14

React團隊Vite

2024-01-26 08:06:43

2021-05-31 17:37:26

ViteReactesbuild

2023-04-07 15:12:46

ReactReact-Intl

2023-12-21 08:51:37

防抖節流Vue.js

2024-03-06 11:14:13

ViteReact微前端

2024-09-13 09:03:28

2021-05-21 09:34:40

React React 17前端

2021-09-14 07:06:13

React項目TypeScript

2023-07-17 06:26:45

Strve 項目JSX語法

2023-04-14 09:01:23

2024-01-16 09:56:25

2022-06-21 07:41:08

FCPJS代碼

2022-08-15 18:22:22

JS代碼

2009-06-24 17:34:58

使用JSF的經驗

2011-09-05 14:26:43

PhoneGap插件
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 久久99精品久久久久久狂牛 | 午夜网| 久久精品国产一区二区电影 | 日本h片在线观看 | 久久精品视频在线播放 | 99久久精品免费 | 国产午夜精品一区二区三区嫩草 | 奇米av | 国产精品网址 | 国产综合网站 | 蜜桃视频成人 | 国产精品毛片无码 | 日韩中文字幕 | 欧美日韩中文字幕在线 | 欧美日日日日bbbbb视频 | 色性av | 国产精品久久久久久一区二区三区 | 请别相信他免费喜剧电影在线观看 | 日本一区二区三区精品视频 | 亚洲精品久久久久久下一站 | 一区二区三区视频免费观看 | 婷婷综合五月天 | 精品久久久久香蕉网 | 国产免费av在线 | 美女国产| 国产精品一二区 | 麻豆av免费观看 | 国产精品视频免费观看 | 99久久精品一区二区成人 | 午夜影院在线观看视频 | 不卡一区| 午夜精品久久久久久不卡欧美一级 | 日韩福利电影 | 中文字幕精品一区 | 久久久久亚洲 | 欧美精品一区二区三区蜜桃视频 | 免费激情网站 | 午夜在线 | 超碰免费在| 国产精品美女www爽爽爽视频 | 中文字幕一二三 |