日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
解決Vite-React項(xiàng)目中Js使用Jsx語(yǔ)法報(bào)錯(cuò)

本文轉(zhuǎn)載自微信公眾號(hào)「粥里有勺糖」,作者粥里有勺糖 。轉(zhuǎn)載本文請(qǐng)聯(lián)系粥里有勺糖公眾號(hào)。

成都創(chuàng)新互聯(lián)堅(jiān)持“要么做到,要么別承諾”的工作理念,服務(wù)領(lǐng)域包括:成都做網(wǎng)站、成都網(wǎng)站設(shè)計(jì)、成都外貿(mào)網(wǎng)站建設(shè)、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣等服務(wù),滿足客戶于互聯(lián)網(wǎng)時(shí)代的文縣網(wǎng)站設(shè)計(jì)、移動(dòng)媒體設(shè)計(jì)的需求,幫助企業(yè)找到有效的互聯(lián)網(wǎng)解決方案。努力成為您成熟可靠的網(wǎng)絡(luò)建設(shè)合作伙伴!

背景

在做存量項(xiàng)目接入Vite測(cè)試時(shí)發(fā)現(xiàn),存量(老)項(xiàng)目中很多是直接在js中書寫jsx語(yǔ)法,使用Vite啟動(dòng)時(shí)就會(huì)拋出一堆問(wèn)題Failed to parse source。

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

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

報(bào)錯(cuò)截圖如下

復(fù)現(xiàn)問(wèn)題

初始化demo項(xiàng)目

 
 
 
 
  1. # npm 6.x
  2. npm init vite@latest my-react-app --template react-ts
  3. # npm 7+, extra double-dash is needed:
  4. npm init vite@latest my-react-app -- --template react-ts
  5. # yarn
  6. 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

啟動(dòng)

 
 
 
 
  1. npm run dev

頁(yè)面正常,接下來(lái)將App.tsx修改為App.js

將會(huì)得到上述的報(bào)錯(cuò)

原因

  1. Vite在啟動(dòng)時(shí)會(huì)做依賴的預(yù)構(gòu)建[1]
  2. 預(yù)構(gòu)建,運(yùn)行時(shí)默認(rèn)都只會(huì)對(duì)jsx與tsx做語(yǔ)法轉(zhuǎn)換。不會(huì)對(duì)js做jsx的語(yǔ)法轉(zhuǎn)換。

解決方案

  1. 修改依賴預(yù)構(gòu)建的配置
  2. 使用babel插件@babel/plugin-transform-react-jsx,讓Vite在運(yùn)行時(shí)對(duì)js文件轉(zhuǎn)換

按照文檔描述在配置文件添加一點(diǎn)配置

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

通過(guò)閱讀@vite/plugin-react的文檔[2],發(fā)現(xiàn)其支持傳入babel插件

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

添加插件

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

再次啟動(dòng)驗(yàn)證,發(fā)現(xiàn)一個(gè)報(bào)錯(cuò)

原因是沒(méi)有在App.js中引入React,咱們引入一下

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

大功告成

總結(jié)

兩種處理方案

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

第二種方法會(huì)一定程度影響項(xiàng)目的啟動(dòng)速度。讀者可以根據(jù)實(shí)際項(xiàng)目情況pick方案


網(wǎng)頁(yè)標(biāo)題:解決Vite-React項(xiàng)目中Js使用Jsx語(yǔ)法報(bào)錯(cuò)
轉(zhuǎn)載來(lái)源:http://www.5511xx.com/article/cdsossd.html