React + Umi(Umijs/Max) 搭建項目及配置

文章標題

  • 01 環境準備
  • 02 快速構建
    • 2.1 參數選項
    • 2.2 umi@x 還是 @umijs/max
    • 2.3 使用 pnpm (推薦)
    • 2.4 使用 npm 和 yarn
    • 2.5 啟動項目
    • 2.6 啟用 Prettier(可選)
    • 2.7 打包部署發布
  • 03 Tailwind CSS 插件(可選)
    • 3.1 安裝配置
    • 3.2 可能遇到的問題
  • 04 React 中的 classnames
    • 4.1 安裝
    • 4.2 使用
      • 參考示例如下
      • 在React中使用

01 環境準備

首先得有 node,并確保 node 版本是 18 或以上

  • windows 下推薦用 nvm 來管理 node 版本(nvm中文文檔)
  • mac 下推薦使用 n 來管理 node 版本(npm-n 官方文檔)

安裝 node 👇

# windows: nvm 操作
$ nvm install 18.20.0
$ nvm use 18.20.0
$ node -v
v18.20.0# mac: n 操作
$ sudo n 18.20.0
$ node -v
v18.20.0

還需要包管理工具,node 默認包含 npm,但也可以選擇其他方案,如:pnpmyarn

此處選擇安裝 pnpm👇

# 方式1: 一個普通版本,它需要Node.js來運行。
npm install -g pnpm# 方式2: 與Node.js一起打包成一個可執行文件,所以它可以在沒有安裝Node.js的系統上使用。
npm install -g @pnpm/exe

02 快速構建

2.1 參數選項

使用 create-umi 創建項目時,可用的參數如下:

option(可選參數)描述
–no-git創建項目,但不初始化 Git
–no-install創建項目,但不自動安裝依賴

2.2 umi@x 還是 @umijs/max

使用 create-umi 選擇 Ant Design Pro 模板,就能使用 @umijs/max 來創建項目了

$ npx create-umi@latest
? Pick Umi App Template ? - Use arrow-keys. Return to submit.Simple App
?   Ant Design ProVue Simple App

Umi Max 項目中命令行請使用 max{:bash},而不是原來的 umi{:bash},示例如下 👇

$ npx max g jest

歷史項目升級:如果使用了 @umijs/max 可以使用 max 命令來替換 umi,如 max dev,max build 等。而 umi@4 將一些項目前置操作放到了 setup 命令中,如 umi@3 中的 umi g tmp 等命令,需要使用 umi setup 替換,示例如下 👇

// package.json
{"scripts": {
-    "build": "umi build",
+    "build": "max build",
-    "postinstall": "umi g tmp",
+    "postinstall": "max setup",
-    "start": "umi dev",
+    "start": "max dev",}
}

詳細升級步驟參考 升級到 Umi 介紹

2.3 使用 pnpm (推薦)

國內建議選 pnpm + taobao 源,速度提升明顯。這一步會自動安裝依賴,同時安裝成功后會自動執行 umi setup 做一些文件預處理等工作。

$ pnpm dlx create-umi@latest
? Install the following package: create-umi? (Y/n) · true
┌   create-umi 
│
○  What's the target folder name?
│  my-app
│
○  Pick Umi App Template
│  ● Simple App 
│  ○ Ant Design Pro  
│  ○ Vue Simple App
│  ○ Umi Plugin
│
○  Pick Npm Client
│  ○ npm
│  ○ cnpm
│  ○ tnpm
│  ○ yarn
│  ● pnpm (recommended)
│
○  Pick Npm Registry
│  ○ npm 
│  ● taobao
│
└  You're all set!...Done in 1m 45.8s using pnpm v10.10.0

2.4 使用 npm 和 yarn

# npm
$ npx create-umi@latest
Need to install the following packages:create-umi@latest
Ok to proceed? (y) y
...# yarn 
yarn create umi
success Installed "create-umi@4.0.6" with binaries:- create-umi
...

2.5 啟動項目

執行 pnpm dev 命令,在瀏覽器里打開 http://localhost:8000/,就能看到項目界面

$ pnpm dev
...╔════════════════════════════════════════════════════╗║ App listening at:                                  ║║  >   Local: http://localhost:8000                  ║
ready - ║  > Network: http://192.168.11.188:8000             ║║                                                    ║║ Now you can open browser with the above addresses↑ ║╚════════════════════════════════════════════════════╝
...        

2.6 啟用 Prettier(可選)

如果需要用 prettier 做項目代碼的自動格式化,執行 pnpm umi g 命令

$ pnpm umi g
? Pick generator type ? Enable Prettier -- Enable Prettier
info  - Write package.json
info  - Write .prettierrc
info  - Write .prettierignore
info  - Install dependencies with pnpm

2.7 打包部署發布

執行 pnpm build 命令

$ pnpm build
event - compiled successfully in 1179 ms (567 modules)
event - build index.html

打包文件默認會生成到 ./dist 目錄下

./dist
├── index.html
├── umi.css
└── umi.js

完成構建后,就可以把 dist 目錄部署到服務器上了。

03 Tailwind CSS 插件(可選)

3.1 安裝配置

Umi 和 Umi Max 項目使用 Tailwind CSS 功能,使用微生成器一鍵開啟該插件

Umi 項目

$ npx umi g tailwindcss
info  - Update package.json for devDependencies
set config:tailwindcss on /project/max-playground/.umirc.ts
info  - Update .umirc.ts
info  - Write tailwind.config.js
info  - Write tailwind.css

Umi Max 項目

$ npx max g tailwindcss
info  - Update package.json for devDependencies
set config:tailwindcss on /project/max-playground/.umirc.ts
info  - Update .umirc.ts
info  - Write tailwind.config.js
info  - Write tailwind.css

至此就可以在項目中使用 Tailwind CSS 的樣式,并且可以在項目根目錄的 tailwind.config.jstailwind.css 根據需要修改配置。

注意需要同步插件依賴 👇

$ pnpm i

在項目根目錄添加 .env 文件,添加 CHECK_TIMEOUT 變量,用于設置 Tailwind CSS 插件的檢查間隔時間。

# Default: 5
CHECK_TIMEOUT=10

3.2 可能遇到的問題

(1)終端報錯 Unexpected unknown at-rule “@tailwind” at-rule-no-unknown
問題描述:因為 @umijs/max 項目已經添加 husky,并為項目生成 precommit 配置(即 git commit message 格式校驗行為),在每次 git commit 前會將 Git 暫存區的代碼默認格式化。 但使用 vscode 用戶,在 commit 代碼時可能會遇到下面這樣的問題:

tailwind.css1:1  ?  Unexpected unknown at-rule "@tailwind"  at-rule-no-unknown2:1  ?  Unexpected unknown at-rule "@tailwind"  at-rule-no-unknown3:1  ?  Unexpected unknown at-rule "@tailwind"  at-rule-no-unknownhusky - pre-commit script failed (code 1)

問題原因:vscode 編輯器可能識別不了 “@tailwind” 導致 pre-commit 沒有通過
解決方案1:找到 .husky 下的 pre-commit 文件進行刪除
解決方案2:在 commit 時加上 --no-verify 參數繞過檢查

git commit -m "xxx" --no-verify

解決方案3: https://github.com/tailwindlabs/tailwindcss/discussions/5258
1.在項目的根目錄下創建 .vscode,并用兩個名為 settings.jsontailwind.json
2.更新 settings.jsontailwind.json文件

// settings.json
{"css.customData": [".vscode/tailwind.json"],// (識別您正在使用的文件類型,例如css)"css.lint.unknownAtRules": "ignore"
}// tailwind.json
{"version": 1.1,"atDirectives": [{"name": "@tailwind","description": "Use the `@tailwind` directive to insert Tailwind's `base`, `components`, `utilities` and `screens` styles into your CSS.","references": [{"name": "Tailwind Documentation","url": "https://tailwindcss.com/docs/functions-and-directives#tailwind"}]},{"name": "@apply","description": "Use the `@apply` directive to inline any existing utility classes into your own custom CSS. This is useful when you find a common utility pattern in your HTML that you’d like to extract to a new component.","references": [{"name": "Tailwind Documentation","url": "https://tailwindcss.com/docs/functions-and-directives#apply"}]},{"name": "@responsive","description": "You can generate responsive variants of your own classes by wrapping their definitions in the `@responsive` directive:\n```css\n@responsive {\n  .alert {\n    background-color: #E53E3E;\n  }\n}\n```\n","references": [{"name": "Tailwind Documentation","url": "https://tailwindcss.com/docs/functions-and-directives#responsive"}]},{"name": "@screen","description": "The `@screen` directive allows you to create media queries that reference your breakpoints by **name** instead of duplicating their values in your own CSS:\n```css\n@screen sm {\n  /* ... */\n}\n```\n…gets transformed into this:\n```css\n@media (min-width: 640px) {\n  /* ... */\n}\n```\n","references": [{"name": "Tailwind Documentation","url": "https://tailwindcss.com/docs/functions-and-directives#screen"}]},{"name": "@variants","description": "Generate `hover`, `focus`, `active` and other **variants** of your own utilities by wrapping their definitions in the `@variants` directive:\n```css\n@variants hover, focus {\n   .btn-brand {\n    background-color: #3182CE;\n  }\n}\n```\n","references": [{"name": "Tailwind Documentation","url": "https://tailwindcss.com/docs/functions-and-directives#variants"}]}]
}

04 React 中的 classnames

classnames 是一個強大的工具,可以幫助你在 React 項目中更優雅地處理 className。通過它,你可以輕松地根據條件動態生成 className,從而使代碼更加簡潔和易讀。它還支持混合對象、數組和字符串參數,使得支持可選的 className 屬性更加簡單。通過使用 classnames,你可以避免手動拼接字符串,從而減少錯誤并提高代碼的可維護性。

4.1 安裝

$ npm install classnames
# 或者
$ yarn add classnames
# 或者
$ pnpm i classnames

4.2 使用

參考示例如下

// classNames函數接受任意數量的參數,這些參數可以是字符串或對象
classNames('foo', 'bar'); // => 'foo bar'
classNames('foo', { bar: true }); // => 'foo bar'
classNames({ 'foo-bar': true }); // => 'foo-bar'
classNames({ 'foo-bar': false }); // => ''
classNames({ foo: true }, { bar: true }); // => 'foo bar'
classNames({ foo: true, bar: true }); // => 'foo bar'
classNames('foo', { bar: true, duck: false }, 'baz', { quux: true }); // => 'foo bar baz quux'
classNames(null, false, 'bar', undefined, 0, 1, { baz: null }, ''); // => 'bar 1'
// 數組也可以按照上述規則遞歸平展:
const arr = ['b', { c: true, d: false }];
classNames('a', arr); // => 'a b c'

在React中使用

import React, { useState } from 'react';
import classNames from 'classnames';export default function Test() {return (<><div className={classNames('foo', 'bar')}>classNames基礎使用實例</div><div className={classNames('foo', 'bar')}><span> classNames+TailwindCss 使用實例</span><span  className={classNames('title', '!text-red-600')}>單獨為特定原子化CSS增加"!"前輟讓它生成的原子化CSS添加"!important"后輟來提高樣式優先級</span></div>        </>
);
}

參考 Umijs官網

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/86232.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/86232.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/86232.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

JDK 17 中 java.lang.System 常用方法及應用場景

概述 java.lang.System 在 JDK 17 中依然是最核心的系統交互類之一。以下是針對 JDK 17 的常用方法詳解&#xff0c;包含新特性和最佳實踐。 一、標準 I/O 流&#xff08;更新至 JDK 17&#xff09; 1. 控制臺輸出 // 傳統輸出方式&#xff08;仍然可用&#xff09; System…

深入探究Manticoresearch Java API:新增與查詢文檔實戰

引言Java 項目集成 Manticoresearch新增文檔操作查詢文檔操作 SQL 查詢API 查詢 總結 引言 Manticore Search 是一個使用 C 開發的高性能搜索引擎&#xff0c;創建于 2017 年&#xff0c;其前身是 Sphinx Search。它顯著改進了 Sphinx 的功能&#xff0c;修復了數百個錯誤&am…

Linux遠程機器無法連接-------解決方案

筆者這幾天碰到linux機器遠程ssh 無法連接的情況 背景分析 筆者在linux機器進行測試的時候&#xff0c;偶發突然無法連接機器&#xff0c;如下圖所示&#xff0c;vscode的遠程連接也無法進行。 telnet也無法登錄。 解決方案 筆者的登錄場景是這樣的&#xff0c;所以懷疑是…

網絡模型中,應用層支持什么協議

在網絡模型中&#xff08;無論是 OSI 七層模型 還是 TCP/IP 四層模型&#xff09;&#xff0c;應用層 是最頂層&#xff0c;直接為用戶或應用程序提供網絡服務接口。它支持的是各種具體的應用程序協議&#xff0c;這些協議定義了特定類型應用程序如何進行通信和數據交換。 以下…

比特幣序數理論與銘文的終極指南

引言&#xff1a;比特幣網絡的意外趨勢 去年&#xff0c;比特幣網絡上出現了一個意外的趨勢——這一趨勢令許多比特幣純粹主義者感到憤怒和驚訝&#xff0c;但同時也在更廣泛的加密貨幣社區中點燃了對這個行業最古老、最安全區塊鏈的希望和熱情。 這個趨勢涉及銘文&#xff0…

C/C++ DLL 動態鏈接庫的開發與示例詳解

簡介 介紹 QT6&#xff0c;DLL 動態鏈接庫的開發&#xff0c;開發示例 詳細 DLL 入口函數 DllMain 是每個 dll 的入口函數&#xff0c;可以寫&#xff0c;也可以不寫&#xff0c;不影響其他庫函數運行。如果使用此函數需要包含頭文件#include <objbase.h>。 BOOL WI…

在 CentOS 7 上基于 Docker 的 LNMP 部署 Hexo

時間起因是因為之前BLOG沒有備份數據都丟失了,今天在和朋友聊天的時候討論到到底使用Hexo還是用Halo?最后還是想熟悉下這兩種博客的架設和部署方式,每次部署都有各種不同的問題,旨在提升自己的學習認知。以此有機會得到更多大佬們的指導~ 因為我是在 CentOS 7 服務器上使用…

《Go小技巧易錯點100例》第三十六篇

本期分享&#xff1a; 1.使用gops獲取正在運行的Go進程 2.將靜態文件編譯到Go程序中 3.Go語言通過多重賦值實現變量值交換 使用gops獲取正在運行的Go進程 在 Go 語言開發中&#xff0c;進程診斷和性能分析是保障服務穩定性的關鍵環節。Google 開源的 gops [https://github.…

Idea新UI

輕松上手Idea新UI&#xff1a;開啟高效編程新體驗 在軟件開發領域&#xff0c;IntelliJ IDEA一直以其強大的功能和出色的性能深受開發者喜愛。而其推出的new ui&#xff0c;更是為我們帶來了全新的操作體驗&#xff0c;進一步提升了開發效率。今天&#xff0c;就來詳細講講如何…

QML\QtQuick\QtWidgets適合的場景及其優缺點

在Qt框架中&#xff0c;QML、QtQuick和QtWidgets是三種不同的UI開發技術&#xff0c;各有其適用場景和優缺點。以下是它們的對比分析&#xff1a; 1. QtWidgets 適用場景&#xff1a; 傳統的桌面應用程序&#xff08;Windows/macOS/Linux&#xff09;。 需要復雜控件&#xf…

Spring Boot 2.x 項目搭建 (二)

因為Spring Boot 2.x 項目搭建 &#xff08;一&#xff09;訪問 start.spring.io 或通過IDE&#xff08;如IntelliJ IDEA&#xff09;的Spring Initializr向導創建項目時&#xff0c;只能使用jdk17以上的版本&#xff0c;這里我需要兼容老項目需要JDK1.8&#xff0c;所以進行一…

Python 前端框架/工具合集

前言 Python 本身并不是為前端開發而設計的語言&#xff0c;但確實有一些 Python 框架可以“變相”地用于前端開發&#xff0c;比如生成 HTML、控制前端頁面邏輯&#xff0c;甚至可以直接運行在瀏覽器中。 目標 本文將對常見的使用python實現的前端框架&#xff0c;先做一個…

Swagger 在 Spring Boot 中的詳細使用指南

Swagger 是一個強大的 API 文檔生成工具&#xff0c;在 Spring Boot 項目中主要通過 springdoc-openapi 庫實現。下面我將詳細講解 Swagger 的配置、注解使用和高級功能。 一、基礎配置 1. 添加依賴 在 pom.xml 中添加&#xff1a; xml 復制 下載 運行 <dependency&…

群暉如何開啟及使用ssh:小白用戶上手指南-家庭云計算專家

最近很多用戶希望提供群暉下onlyoffice的安裝服務,但是很多都是萌新小白,不知道怎么啟用ssh和使用ssh客戶端.這里提供簡單的方法,統一答復: 重要的事情說3遍:一定不要自己發揮,全部按說明的來;一定要在內網環境用內網ip訪問;不要用域名和端口號,謝謝各位萌新了!!! 一、ssh啟用…

Ubuntu查看與切換顯示管理器(已測試ubuntu20,ubuntu24)

一級標題 顯示管理器是用戶使用圖形化的登錄界面。 當用戶成功輸入用戶名和密碼后&#xff0c;即可開始使用圖形化界面會話。gdm3和 lightdm 都是顯示管理器。 它們提供了圖形化登錄并處理用戶身份驗證。 查看正在使用的顯示管理器&#xff1a; cat /etc/X11/default-displa…

ROS 2 中 Astra Pro 相機與 YOLOv5 檢測功能編譯啟動全記錄

先記錄大概主要流程&#xff0c;后期有時間了再完善細節以及附上截圖 一、編譯 Astra Pro 相機功能包 1. 清理并編譯相機包 cd ~/Astra_ws rm -rf build/astra_camera install/astra_camera # 清理舊編譯 colcon build --packages-select astra_camera --parallel-workers …

當實體類名和數據庫表列名不一致時不能封裝數據的解決辦法

1. <resultMap> 是什么&#xff1f; 作用&#xff1a;<resultMap> 用來定義數據庫表字段和Java實體類屬性之間的對應關系。 為什么需要&#xff1f; 數據庫字段通常用下劃線命名&#xff08;如 brand_name&#xff09;&#xff0c;而Java類屬性用駝峰命名&#…

window系統上labelImg的安裝與使用

一、window上安裝Anaconda 下載&#xff1a;https://repo.anaconda.com/archive/選擇版本&#xff0c;此次選擇的是Anaconda3-2025.06-0-Windows-x86_64.exe雙擊安裝在 Windows 搜索欄中輸入 Anaconda Prompt 并打開。 二、安裝pyton3.8 wondow環境 在 Windows 搜索欄中輸入…

SSE 流與普通 HTTP 響應的區別

1. 連接特性 特性普通 HTTP 響應SSE 流連接持續時間一次性&#xff0c;請求-響應后立即關閉持久連接&#xff0c;保持打開狀態通信方向單向 (客戶端→服務器→客戶端)單向 (服務器→客戶端)數據格式完整響應體流式文本數據 (text/event-stream) 2. 數據傳輸方式 普通 HTTP 響…

Proteus仿真51單片機控制L298N PWM電機調速

51單片機概述 51單片機是指Intel公司開發的MCS-51系列單片機及其兼容產品&#xff0c;是應用最廣泛的8位單片機系列之一。其名稱來源于該系列的第一款芯片8051。 主要特點&#xff1a; 8位CPU&#xff1a;處理數據寬度為8位 哈佛結構&#xff1a;程序存儲器和數據存儲器分開…