React 項目初始化與搭建指南

React 項目初始化有多種方式,可以選擇已有的腳手架工具快速創建項目,也可以自定義項目結構并使用構建工具實現項目的構建打包流程。

1.?腳手架方案

1.1.?Vite

通過 Vite 創建 React 項目非常簡單,只需一行命令即可完成。Vite 的工程初始化腳手架會自動處理所有創建工作。

pnpm create vite my-app --template react-ts

1.2.?create-react-app

create-react-app 是 React 官方提供的基于 webpack 的腳手架工具,其核心邏輯封裝在 react-scripts 包中。它簡化了 React 項目的初始化過程,開發者只需執行一行命令:

npx create-react-app my-app --template typescript

2.?自搭建方案

除了使用腳手架外,我們還可以根據業務需求自定義搭建 React 工程。下面分別介紹基于 Webpack 和 Vite 的搭建流程。

2.1.?Webpack 方案

1. 創建項目目錄并初始化

mkdir my-react-app
cd my-react-app
npm init -y

2. 安裝依賴

npm install react react-dom
npm install --save-dev webpack webpack-cli webpack-dev-server 
npm install babel-loader @babel/core @babel/preset-env @babel/preset-react 
npm install html-webpack-plugin css-loader style-loader

3. 創建項目結構

my-react-app/
├── src/
│   ├── index.js
│   └── App.js
├── public/
│   └── index.html
├── webpack.config.js
├── .babelrc
└── package.json

4. 配置 Babel

創建 .babelrc 文件:

{"presets": ["@babel/preset-env", "@babel/preset-react"]
}

5. 配置 Webpack

創建 webpack.config.js 文件:

const path = require('path');
const HtmlWebpackPlugin = require('html-webpack-plugin');module.exports = {entry: './src/index.js',output: {path: path.resolve(__dirname, 'dist'),filename: 'bundle.js',},module: {rules: [{test: /\.(js|jsx)$/,exclude: /node_modules/,use: {loader: 'babel-loader',},},{test: /\.css$/,use: ['style-loader', 'css-loader'],},],},resolve: {extensions: ['.js', '.jsx'],},plugins: [new HtmlWebpackPlugin({template: './public/index.html',}),],devServer: {contentBase: path.join(__dirname, 'dist'),compress: true,port: 9000,},
};

6. 創建 React 組件

src/index.js:

import React from 'react';
import ReactDOM from 'react-dom';
import App from './App';ReactDOM.render(<App />, document.getElementById('root'));

src/App.js:

import React from 'react';const App = () => {return <h1>Hello, Webpack and React!</h1>;
};export default App;

7. 創建 HTML 模板

public/index.html:

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8" /><meta name="viewport" content="width=device-width, initial-scale=1.0" /><title>React App</title>
</head>
<body><div id="root"></div>
</body>
</html>

8. 更新 package.json 腳本

"scripts": {"start": "webpack serve --mode development","build": "webpack --mode production"
}

9. 啟動開發服務器

npm start

2.2.?Vite 方案

1. 創建項目目錄并初始化

mkdir my-react-app
cd my-react-app
npm init -y

2. 安裝 Vite 和相關依賴

npm install react react-dom
npm install --save-dev vite @vitejs/plugin-react

3. 創建項目結構

my-react-app/
├── src/
│   ├── main.jsx
│   ├── App.jsx
│   └── index.css
├── public/
│   └── index.html
├── vite.config.js
├── package.json
└── .gitignore

4. 創建 Vite 配置文件

vite.config.js:

import { defineConfig } from 'vite';
import react from '@vitejs/plugin-react';export default defineConfig({plugins: [react()],server: {open: true,},
});

5. 創建 React 組件

src/main.jsx:

import React from 'react';
import ReactDOM from 'react-dom';
import App from './App';
import './index.css';ReactDOM.render(<React.StrictMode><App /></React.StrictMode>,document.getElementById('root')
);

src/App.jsx:

import React from 'react';const App = () => {return <h1>Hello, Vite and React!</h1>;
};export default App;

src/index.css:

body {font-family: Arial, sans-serif;margin: 0;padding: 0;display: flex;justify-content: center;align-items: center;height: 100vh;background-color: #f6f6f0;
}

6. 創建 HTML 模板

public/index.html:

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8" /><meta name="viewport" content="width=device-width, initial-scale=1.0" /><title>React App</title>
</head>
<body><div id="root"></div><script type="module" src="/src/main.jsx"></script>
</body>
</html>

7. 更新 package.json 腳本

"scripts": {"dev": "vite","build": "vite build","serve": "vite preview"
}

8. 啟動開發服務器

npm run dev

3.?展望

本文介紹了基于 Vite 和 Webpack 搭建 React 基礎項目結構的完整流程。對于更復雜的構建配置,可以在此基礎上通過添加相應的配置實現。Webpack 通過 loader 和 plugin 來增強構建能力,而 Vite 則通過 plugin 來實現類似的功能。這些高級配置我們將在后續文章中詳細探討。

4. 補充資料

Vite 初始化 React:?https://vitejs.dev/guide/#scaffolding-your-first-vite-project

Webpack 初始化 React:?https://github.com/facebookcreate-react-app

React 基礎架構社區方案:?https://github.com/kriasoft/react-starter-kit

React 中文官網:?https://github.com/kriasoft/react-starter-kit

React Hooks 套件:?https://github.com/streamich/react-use

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

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

相關文章

大模型模型推理的成本過高,如何進行量化或蒸餾優化

在人工智能的浪潮中,大模型已經成為推動技術革新的核心引擎。從自然語言處理到圖像生成,再到復雜的多模態任務,像GPT、BERT、T5這樣的龐大模型展現出了驚人的能力。它們在翻譯、對話系統、內容生成等領域大放異彩,甚至在醫療、金融等行業中也開始扮演重要角色。可以說,這些…

機器學習在多介質環境中多污染物空間預測的應用研究

機器學習在多介質環境中多污染物空間預測的應用研究 1. 引言 1.1 研究背景與意義 隨著工業化和城市化進程加速,環境中多種污染物的共存已成為全球性環境問題。重金屬(如鉛、汞、鎘)、有機污染物(如多環芳烴、農藥殘留)和新興污染物(如微塑料、藥品殘留)在空氣、水體、…

圖解深度學習 - 激活函數和損失函數

激活函數和損失函數在深度學習中扮演著至關重要的角色。通過選擇合適的激活函數和損失函數&#xff0c;可以顯著提高神經網絡的表達能力和優化效果。 其中激活函數是神經網絡中的非線性函數&#xff0c;用于在神經元之間引入非線性關系&#xff0c;從而使模型能夠學習和表示復…

影響服務器穩定性的因素都有什么?

服務器的穩定性會影響到業務是否能夠持續運行&#xff0c;用戶在進行訪問網站的過程中是否出現頁面卡頓的情況&#xff0c;本文就來了解一下都是哪些因素影響著服務器的穩定性。 服務器中的硬件設備是保證服務器穩定運行的基礎&#xff0c;企業選擇高性能的處理器和大容量且高速…

TopCode之最大子數組和

題目鏈接 53. 最大子數組和 - 力扣&#xff08;LeetCode&#xff09; 題目解析 算法原理 解法1: 暴力(一個循環用來固定,一個用來找最大的子數組O(n^2),每次往后拓展一個元素就判斷是否是最長的),枚舉出每一種情況, 然后不斷更新最大的 解法二: dp 1> dp的含義: dp[i]記…

深入解析 Flask 命令行工具與 flask run命令的使用

Flask 是一個輕量級的 Python Web 應用框架&#xff0c;其內置的命令行工具&#xff08;CLI&#xff09;基于 Click 庫&#xff0c;提供了方便的命令行接口&#xff0c;用于管理和運行 Flask 應用程序。本文將詳細介紹 Flask 命令行工具的功能&#xff0c;以及如何使用 flask r…

QFramework v1.0 Guide: 工具篇——ViewControllor, ActionKit時序動作執行系統,ResKit資源管理開發解決方案

目錄 一、QFramework.Toolkits簡介 二、View Controllor 1、作用 2、應用場景 3、示例 三、ActionKit時序動作執行系統 1. 用法 &#xff08;1&#xff09;延時回調 &#xff08;2&#xff09;序列執行 &#xff08;3&#xff09;幀延時 &#xff08;4&#xff09;條…

GLIDE論文閱讀筆記與DDPM(Diffusion model)的原理推導

Abstract 擴散模型&#xff08;Diffusion model&#xff09;最近被證明可以生成高質量的合成圖像&#xff0c;尤其是當它們與某種引導技術結合使用時&#xff0c;可以在生成結果的多樣性與保真度之間進行權衡。本文探討了在文本條件圖像生成任務中使用擴散模型&#xff0c;并比…

@Pushgateway 數據自動清理

文章目錄 Pushgateway 數據自動清理一、Pushgateway 數據清理的必要性二、自動清理方案方案1&#xff1a;使用帶TTL功能的Pushgateway分支版本方案2&#xff1a;使用Shell腳本定期清理方案3&#xff1a;結合Prometheus記錄規則自動清理 三、最佳實踐建議四、驗證與維護五、示例…

QML視圖組件ListView、TableView、GridView介紹

1 MVD模型 Model:模型,包含數據及其結構。View:視圖,用于顯示數據。Delegate:代理,規定數據在視圖中的顯示方式。2 ListView 以列表形式展示數據。2.1 屬性 model:設置或獲取列表視圖的數據模型delegate:定義了列表中每一項的外觀和行為currentIndex:獲取或設置當前選…

解決vscode打開一個單片機工程文件(IAR/keil MDK)因無法找到頭文件導致的結構體成員不自動補全問題。

最近一直在用vscode安裝c/c插件后編輯STM32標準庫&#xff08;keil MDK&#xff09;項目源文件&#xff0c;因為我感覺vscode在代碼編輯方面比keil MDK本身優秀太多。發現打開工程后&#xff0c;結構體變量的成員在輸入“.”后不自己彈出的問題&#xff0c;后來查找各方資料&am…

5分鐘申請edu郵箱【方案本周有效】

這篇文章主要展示的是成果。如果你是第1次看見我的內容&#xff0c;具體的步驟請翻看往期的兩篇作品。先看更正補全&#xff0c;再看下一個。 建議你邊看邊操作。 【更正補全】edu教育申請通過方案 本周 edu教育郵箱注冊可行方案 #edu郵箱 偉大無需多言 我已經驗證了四個了…

零知開源——STM32F407VET6驅動ILI9486 TFT顯示屏 實現Flappy Bird游戲教程

簡介 本教程使用STM32F407VET6零知增強板驅動3.5寸 ILI9486的TFT觸摸屏擴展板實現經典Flappy Bird游戲。通過觸摸屏控制小鳥跳躍&#xff0c;躲避障礙物柱體&#xff0c;挑戰最高分。項目涉及STM32底層驅動、圖形庫移植、觸摸控制和游戲邏輯設計。 目錄 簡介 一、硬件準備 二…

云臺式激光甲烷探測器:守護工業安全的“智慧之眼”

在石油化工、天然氣場站、城市燃氣管網等場景中&#xff0c;甲烷泄漏的早期監測是保障生產安全的核心防線。云臺式激光甲烷探測器憑借高精度、無接觸、智能化的技術優勢&#xff0c;成為工業安全監測領域的革新者。本文將深度解析其技術原理、核心功能及適用場景&#xff0c;助…

解決 Ubuntu 20.04 虛擬機中 catkin_make 編譯卡死問題

完整解決步驟 1. 禁用當前交換文件 sudo swapoff /swapfile 2. 刪除舊的交換文件 sudo rm /swapfile 3. 使用更可靠的創建方法 # 使用 dd 命令創建交換文件&#xff08;更兼容但較慢&#xff09; sudo dd if/dev/zero of/swapfile bs1M count4096# 或者使用 truncate 命令…

實驗設計與分析(第6版,Montgomery)第5章析因設計引導5.7節思考題5.7 R語言解題

本文是實驗設計與分析&#xff08;第6版&#xff0c;Montgomery著&#xff0c;傅玨生譯) 第5章析因設計引導5.7節思考題5.7 R語言解題。主要涉及方差分析&#xff0c;正態假設檢驗&#xff0c;殘差分析&#xff0c;交互作用圖&#xff0c;等值線圖。 dataframe <-data.frame…

linux變量的分類

文章目錄 bash中的引號linux變量的分類1.環境變量2.本地變量&#xff1a;3.局部變量4.內置變量5. 位置參數變量6. 特殊變量 變量的定義規則8.數組 bash中的引號 雙引號"" &#xff1a;會把引號的內容當成整體來看待&#xff0c;允許通過 符號引用其他變量值單引 號 …

邏輯回歸知識點

一、邏輯回歸概念 邏輯回歸(Logistic Regression)是一種廣泛應用于分類問題的統計方法&#xff0c;尤其適用于二分類問題。 注意: 盡管名稱中有"回歸"二字&#xff0c;但它實際上是一種分類算法。 解決二分類的問題。 API&#xff1a;sklearn.linear_model.Logis…

GCC內存占用統計使用指南

GCC 的 --print-memory-usage 選項用于在編譯鏈接過程中輸出程序的內存占用統計信息&#xff0c;特別適用于嵌入式開發等內存受限的場景。其主要作用和輸出內容如下&#xff1a; 核心功能 顯示內存分段占用 輸出程序在目標設備內存中的分段占用情況&#xff0c;通常包括&#…

Vue3 + Typescript:類型使用記錄 / 類型注解 / 積累

一、ReturnType<typeof createApp> ReturnType<typeof createApp> 是一種類型安全的寫法&#xff0c;是 TypeScript 中的一個高級類型&#xff0c;它用于獲取函數 createApp 的返回類型。 實例&#xff1a; import registerFocus from ./focus // 獲取焦點 impo…