Appearance
React 项目创建与目录解析
在本章节中,我们将学习如何创建 React 项目并理解项目的目录结构。
4.1 两种创建方式
方式1:create-react-app 创建传统React项目
create-react-app 是官方推荐的创建 React 项目的方式,它会为你设置好所有必要的配置。
创建项目:
bashnpx create-react-app my-react-app进入项目目录:
bashcd my-react-app启动开发服务器:
bashnpm start构建生产版本:
bashnpm run build
方式2:Vite 极速创建React项目(推荐)
Vite 是一个现代化的前端构建工具,它提供了更快的开发体验。
创建项目:
bashnpm create vite@latest my-react-app -- --template react进入项目目录:
bashcd my-react-app安装依赖:
bashnpm install启动开发服务器:
bashnpm run dev构建生产版本:
bashnpm run build
4.2 项目启动、停止、打包命令详解
开发服务器命令
启动开发服务器:
bash# create-react-app npm start # Vite npm run dev停止开发服务器:
- 在终端中按
Ctrl+C
- 在终端中按
构建命令
- 构建生产版本:bash构建产物会生成在
npm run buildbuild或dist目录中。
其他命令
运行测试:
bashnpm test** ejected 配置**(仅 create-react-app):
bashnpm run eject注意:此操作不可逆,会将所有配置文件暴露出来。
4.3 项目目录结构逐文件解析
Vite 创建的项目结构
my-react-app/
├── node_modules/ # 依赖包
├── public/ # 静态资源
│ └── favicon.ico # 网站图标
├── src/ # 源代码
│ ├── App.css # App 组件样式
│ ├── App.jsx # App 组件
│ ├── index.css # 全局样式
│ └── main.jsx # 入口文件
├── .gitignore # Git 忽略文件
├── index.html # HTML 模板
├── package.json # 项目配置
├── package-lock.json # 依赖版本锁定
└── vite.config.js # Vite 配置create-react-app 创建的项目结构
my-react-app/
├── node_modules/ # 依赖包
├── public/ # 静态资源
│ ├── favicon.ico # 网站图标
│ ├── index.html # HTML 模板
│ └── manifest.json # PWA 配置
├── src/ # 源代码
│ ├── App.css # App 组件样式
│ ├── App.js # App 组件
│ ├── App.test.js # App 组件测试
│ ├── index.css # 全局样式
│ ├── index.js # 入口文件
│ └── logo.svg # React 标志
├── .gitignore # Git 忽略文件
├── package.json # 项目配置
└── package-lock.json # 依赖版本锁定核心目录和文件解析
public 目录
- 作用:存放静态资源,这些资源会被直接复制到构建产物中
- 常见文件:
index.html:HTML 模板,React 应用会挂载到这个文件中favicon.ico:网站图标- 其他静态资源:图片、字体等
src 目录
- 作用:存放源代码,这是我们主要工作的目录
- 常见文件:
main.jsx/index.js:应用入口文件App.jsx/App.js:根组件- 其他组件文件
- 样式文件
- 工具函数
- 状态管理文件
4.4 入口文件、根组件作用讲解
入口文件(main.jsx / index.js)
作用:
- 导入 React 和 ReactDOM
- 导入根组件
- 将根组件渲染到 DOM 中
示例代码:
jsx
// Vite 项目 (main.jsx)
import React from 'react'
import ReactDOM from 'react-dom/client'
import App from './App.jsx'
import './index.css'
ReactDOM.createRoot(document.getElementById('root')).render(
<React.StrictMode>
<App />
</React.StrictMode>,
)jsx
// create-react-app 项目 (index.js)
import React from 'react';
import ReactDOM from 'react-dom';
import './index.css';
import App from './App';
ReactDOM.render(
<React.StrictMode>
<App />
</React.StrictMode>,
document.getElementById('root')
);根组件(App.jsx / App.js)
作用:
- 作为应用的根组件
- 组织和管理其他子组件
- 定义应用的基本结构
示例代码:
jsx
// App.jsx
import { useState } from 'react'
import reactLogo from './assets/react.svg'
import viteLogo from '/vite.svg'
import './App.css'
function App() {
const [count, setCount] = useState(0)
return (
<>
<div>
<a href="https://vite.dev" target="_blank">
<img src={viteLogo} className="logo" alt="Vite logo" />
</a>
<a href="https://react.dev" target="_blank">
<img src={reactLogo} className="logo react" alt="React logo" />
</a>
</div>
<h1>Vite + React</h1>
<div className="card">
<button onClick={() => setCount((count) => count + 1)}>
count is {count}
</button>
<p>
Edit <code>src/App.jsx</code> and save to test HMR
</p>
</div>
<p className="read-the-docs">
Click on the Vite and React logos to learn more
</p>
</>
)
}
export default App项目配置文件
package.json
作用:
- 定义项目的基本信息
- 管理项目依赖
- 定义脚本命令
示例代码:
json
{
"name": "my-react-app",
"private": true,
"version": "0.0.0",
"type": "module",
"scripts": {
"dev": "vite",
"build": "vite build",
"lint": "eslint . --ext js,jsx --report-unused-disable-directives --max-warnings 0",
"preview": "vite preview"
},
"dependencies": {
"react": "^18.2.0",
"react-dom": "^18.2.0"
},
"devDependencies": {
"@types/react": "^18.2.43",
"@types/react-dom": "^18.2.17",
"@vitejs/plugin-react": "^4.2.1",
"eslint": "^8.55.0",
"eslint-plugin-react": "^7.33.2",
"eslint-plugin-react-hooks": "^4.6.0",
"eslint-plugin-react-refresh": "^0.4.5",
"vite": "^5.0.8"
}
}vite.config.js(Vite 项目)
作用:
- 配置 Vite 的构建选项
- 配置插件
- 配置别名
示例代码:
javascript
import { defineConfig } from 'vite'
import react from '@vitejs/plugin-react'
// https://vitejs.dev/config/
export default defineConfig({
plugins: [react()],
})常见问题解决
创建项目失败:
- 检查网络连接
- 确保 Node.js 版本符合要求
- 尝试使用镜像源
依赖安装失败:
- 清理 npm 缓存:
npm cache clean --force - 尝试删除
node_modules目录和package-lock.json文件,然后重新安装
- 清理 npm 缓存:
开发服务器启动失败:
- 检查端口是否被占用
- 确保依赖已正确安装
- 查看终端错误信息
构建失败:
- 检查代码中是否有语法错误
- 确保所有依赖都已正确安装
- 查看终端错误信息
通过本章节的学习,你已经掌握了如何创建 React 项目并理解了项目的目录结构。现在你可以开始学习 React 的核心概念和实践技能了。
