Vite+React搭建開發構建環境實踐

来源:https://www.cnblogs.com/vvjiang/archive/2022/09/15/16693767.html
-Advertisement-
Play Games

前言 使用 Vite 已經有兩年了,期間使用它開發過單頁面應用,也開發過瀏覽器擴展插件,對比日常工作中用到的 webpack 構建速度大幅提升,開發體驗也好很多。 雖然相比於 webpack 來說簡單了很多,但是仍然有一些配置需要記錄一下,以便之後可以快速搭建一個本地開發構建的環境。 使用 crea ...


前言

使用 Vite 已經有兩年了,期間使用它開發過單頁面應用,也開發過瀏覽器擴展插件,對比日常工作中用到的 webpack 構建速度大幅提升,開發體驗也好很多。
雖然相比於 webpack 來說簡單了很多,但是仍然有一些配置需要記錄一下,以便之後可以快速搭建一個本地開發構建的環境。

使用 create-vite 腳手架生成基礎模板

運行命令安裝腳手架

yarn create vite

我在安裝時提供的命令行選項那裡,選擇了 React + TypeScript。

使用下麵的命令啟動項目

yarn dev

此時的項目已經預設集成了 @vitejs/plugin-react 這個插件。

到這一步其實就已經基本結束了,自動集成 HMR,jsx,ts,css module,資源打包等一系列功能。

相比於 webpack,簡直不要太友好。

eslint

先安裝 eslint

yarn add eslint -D

然後初始化eslint配置:

yarn eslint --init

選擇選項後,我自己安裝的庫大致是:

eslint-plugin-react@latest
eslint-config-standard-with-typescript@latest
@typescript-eslint/eslint-plugin@^5.0.0
eslint@^8.0.1
eslint-plugin-import@^2.25.2
eslint-plugin-n@^15.0.0
eslint-plugin-promise@^6.0.0
typescript@* // 這個可以移除

之後有兩個方案:

  • 方案一,使用vite-plugin-eslint,這個會在報錯時在頁面上顯示報錯信息。
  • 方案二,使用 VSCode 的 ESlint 插件去使用 ESLint,這個是在代碼上出現紅線報錯。(個人更喜歡這種)

方案二直接用插件即可,方案一需要安裝一下庫:

yarn add vite-plugin-eslint -D

安裝完畢後,在vite.config.ts中配置:

//...
import eslint from "vite-plugin-eslint";

export default defineConfig({
    plugins: [react(), eslint()],
    //...
});

無論方案一還是方案二,此時仍會報錯,因為 ESLint 無法解析 ts 代碼,所以還需要安裝 @typescript-eslint/parser

yarn add @typescript-eslint/parser -D

最後你還需要在.eslintrc.json 加上這行配置:

"parserOptions": {
    //...
    "project": "tsconfig.json"
},

基本完畢。

為什麼說是基本?因為 eslint 配置還是更多跟代碼習慣有關,比如單雙引號的使用之類的,所以剛配置完一般都一堆報錯,還需要自己去慢慢調整。

而且還涉及到與 prettier 的配置相衝突的問題,eslint 和 prettier 的配置分別是代碼校驗和代碼格式化時的規則,所以也是要保證規則一致的。

手動調整規則太繁瑣了,一般使用eslint-config-prettier禁用掉 ESLint 中和 Prettier 配置有衝突的規則,然後用eslint-plugin-prettier保證 eslint 用 prettier 的風格校驗。

yarn add eslint-config-prettier eslint-plugin-prettier -D

然後在.eslintrc.json 中加上配置:

{
    "extends": [
        //...
        "plugin:prettier/recommended"
    ],
}

另外根據需要一般常用的配置列一下:

{
    "rules": {
        "react/react-in-jsx-scope":"off", // 使用 jsx 時不需要引用 React
        "@typescript-eslint/strict-boolean-expressions":"off" // 表達式中的布爾值必須嚴格是布爾類型
    }
}

這裡也可能涉及到對tsconfig.json的修改:

{
  "compilerOptions": {
    "noImplicitAny":false, // 未聲明類型的變數自動預設為any類型
  }
}

這裡的配置較多,並且也因人而異,就不一一贅述了。

只要保持團隊內部代碼風格統一,就算是不符合標準規範的代碼,其實也是好代碼。

prettier

安裝

yarn add prettier -D

根目錄下新建.prettierrc 配置文件,然後給個我自己用的配置方案:

{
    printWidth: 100,
    tabWidth: 4,
    useTabs: false,
    singleQuote: true,
    jsxSingleQuote: false,
    endOfLine: 'lf'
}

一般這個配合 VSCode 的 Prettier 插件和保存時格式化即可。

另外,對於 lf 和 crlf 的處理,保存時沒法切換,需要在 VSCode 中設置。

react-router

安裝:

yarn add react-router-dom

然後修改 main.tsx 中的代碼吧:

//...
import {RouterProvider} from "react-router-dom";
import router from './router';

//...
ReactDOM.createRoot(document.getElementById('root') as HTMLElement).render(
    <React.StrictMode>
        <RouterProvider router={router} />
    </React.StrictMode>
);

這裡我將路由相關代碼放在了單獨的路由文件 router.tsx 中:

import { createBrowserRouter } from 'react-router-dom';
import Framework from './Framework';
import Error from './Error';
import Home from '@/pages/home';
import About from '@/pages/about';

const router = createBrowserRouter([
    {
        path: '/',
        element: <Framework />,
        errorElement: <Error />,
        children: [
            {
                path: 'home',
                element: <Home />,
            },
            {
                path: 'about',
                element: <About />,
            },
        ],
    },
]);

export default router;

antd

安裝命令:

yarn add antd

然後在主 less 文件中加上代碼:

@import 'antd/es/style/themes/default.less';
@import 'antd/dist/antd.less';

@primary-color: #4294ff; // 更換全局主色

然後還需要更改 vite.config.ts

//...
export default defineConfig({
     //...
    css: {
        preprocessorOptions: {
            less: {
                javascriptEnabled: true,
            },
        },
    },
});

別名

通常我們會使用下麵的方式來使用別名:

import reactLogo from "@/assets/react.svg";

預設情況下,會直接報錯,所以我們需要在vite.config.ts進行如下配置:

//...
import path from "path";

export default defineConfig({
    //...
    resolve: {
        alias: {
            "@": path.resolve(__dirname, "src"),
        },
    },
});

這裡因為沒有 path 這個依賴庫,所以還要運行命令安裝:

yarn add path -D

此時別名功能已經可以正常使用,但是__dirname會報紅,需要安裝@types/node

yarn add @types/node -D

這時別名時沒有智能提示的,所以還需要在tsconfig.json中,配置:

{
    "compilerOptions": {
        //...
        "baseUrl": "./",
        "paths": {
            "@/*": ["src/*"]
        }
    },
}

完畢。

Less 與 CSS Module

Vite 已集成了 CSS Module 功能,但是想要使用 Less 還需要安裝 less 這個庫。

yarn add less

最後使用的方式如下:

import styles from "./App.module.less";

總結

暫時就記錄這麼多吧,後續如果有一些別的功能配置,也會統一記錄在這篇博客。

示例代碼倉庫:vite-react-practice

作者:韓子盧
出處:https://www.cnblogs.com/vvjiang/
本博客文章均為作者原創,轉載請註明作者和原文鏈接。
您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • SSO介紹 背景 隨著企業的發展,一個大型系統里可能包含 n 多子系統, 用戶在操作不同的系統時,需要多次登錄,很麻煩,我們需要一種全新的登錄方式來實現多系統應用群的登錄,這就是單點登錄。 web 系統 由單系統發展成多系統組成的應用群,複雜性應該由系統內部承擔,而不是用戶。無論 web 系統內部多 ...
  • 隨著項目的日漸迭代,項目整體的代碼量也會越來越多,從而導致項目體積越來越大;在Webpack時代,很多人會對歷史項目(巨型項目)感到頭疼,因為往往巨型項目在本地開發調試的時候會因為本地代碼的修改觸發HMR熱更新重載頁面,然而這一過程在Webpack的運行機制中顯得很慢,並且是隨著項目越大,熱更新的速 ...
  • 這裡給大家分享我在網上總結出來的一些知識,希望對大家有所幫助 最近每天學習的時候,發現了一道很有趣的面試題 1.const [a, b] = { a: 100, b: 200 } 2.console.log(a) 3.console.log(b) 如何在不改變1的情況下,讓代碼不報錯 這個時候,我突 ...
  • 前端像素鳥小游戲 點擊打開視頻講解更加詳細 一、案例效果 二、實現思路 創建游戲背景板和小鳥,並分別設置相對定位與絕對定位; 初始化背景圖的位置; 初始化小鳥的位置; 設置游戲狀態,游戲開始時背景和管道全部向左運動,游戲結束全部停止運動; 使小鳥飛行,其實就是背景圖在 X 軸方向的位置不斷減小,實現 ...
  • 一、案例效果 點擊打開視頻講解更加詳細 二、實現思路 創建游戲背景板; 創建我方戰機,滑鼠進入游戲面板後其隨滑鼠軌跡運動; onmousemove 創建子彈,讓子彈周期性的在戰機處發出並讓其向 top 值減小的方向(向上)移動,top 小於 0 也就是子彈走出游戲面板時刪除自身; 創建敵機,讓敵機周 ...
  • 話說新冠3年,“狀態管理框架”豪傑並起、群雄逐鹿,ReduxToolkit、Mobx、Vuex、Pinia、Dva、Rematch、Recoil、Zustand、Mirror...敢問英雄獨鐘哪廂? ...
  • 每日3題 1 以下代碼執行後,控制臺中的輸出內容為? // 以下代碼執行後,控制臺中輸出的內容是什麼 var fullname = "a"; var obj = { fullname: "b", prop: { fullname: "c", getFullname: function () { re ...
  • 樣式獲取 style屬性 只能獲取標簽內容style屬性裡面存在的一些樣式 如果你需要獲取對應的全局所有地方設置樣式 我們就需要採用一些方法 getComputedStyle 方法屬於window的方法 Window.getComputedStyle()方法返回一個對象,該對象在應用活動樣式表並解析 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...