前端 - 项目搭建

375 阅读3分钟

创建项目

npx create-react-app react-app

然后进入到项目目录, 安装 RSBuild

pnpm install @rsbuild/core @rsbuild/plugin-react --save-dev

安装 RSBuild 的核心模块以及 React 插件

在项目根目录下创建一个 rsbuild.config.js 文件。这是 RSBuild 的配置文件。

import { defineConfig } from '@rsbuild/core';
import { pluginReact } from '@rsbuild/plugin-react';

export default defineConfig({
  plugins: [pluginReact()],
  dev: {
    client: {
      port: '',
    },
  },
});

删除无用的文件, 只保留最基础的

补充


安装依赖

通用插件

首先是项目中必须要用到的几个插件

pnpm add react-router-dom axios @reduxjs/toolkit react-redux --save

组件库

pnpm add antd-mobile

处理sass

npm install @rsbuild/plugin-sass --save-dev

在你的 RSBuild 配置文件中,通常是 rsbuild.config.js,添加 @rsbuild/plugin-sassplugins 数组中

import { defineConfig } from '@rsbuild/core';
import { pluginReact } from '@rsbuild/plugin-react';
import { pluginSass } from '@rsbuild/plugin-sass';

export default defineConfig({
  plugins: [pluginReact(), pluginSass()],
  dev: {
    client: {
      port: '',
    },
  },
});

全部安装完成后的内容

{
  "name": "account-book-web",
  "private": true,
  "version": "1.0.0",
  "scripts": {
    "dev": "rsbuild dev",
    "build": "rsbuild build",
    "preview": "rsbuild preview"
  },
  "dependencies": {
    "@reduxjs/toolkit": "^2.2.7",
    "antd-mobile": "^5.37.1",
    "axios": "^1.7.3",
    "react": "^18.3.1",
    "react-dom": "^18.3.1",
    "react-redux": "^9.1.2",
    "react-router-dom": "^6.26.0"
  },
  "devDependencies": {
    "@rsbuild/core": "^0.7.3",
    "@rsbuild/plugin-react": "^0.7.3",
    "@rsbuild/plugin-sass": "1.0.1-beta.13",
    "@types/react": "^18.3.3",
    "@types/react-dom": "^18.3.0",
    "typescript": "^5.4.2"
  }
}

调整结构

项目中各个功能一般都有单独的文件夹来做响应的事儿, 所以首先需要做的就是创建出对应的文件夹, 以及核心的几个页面

结构

├── README.md
├── package.json
├── pnpm-lock.yaml
├── rsbuild.config.ts
├── src
|  ├── App.css
|  ├── App.tsx
|  ├── api
|  |  ├── api.ts
|  |  └── index.ts
|  ├── env.d.ts
|  ├── index.tsx
|  ├── pages
|  |  ├── addRecord
|  |  |  └── index.tsx
|  |  ├── home
|  |  |  └── index.tsx
|  |  ├── recordList
|  |  |  ├── month.tsx
|  |  |  └── year.tsx
|  |  ├── register
|  |  |  └── Register.tsx
|  |  └── signin
|  |     └── index.tsx
|  ├── router
|  |  └── index.tsx
|  └── store
|     ├── index.ts
|     └── modules
|        └── recordList.ts
└── tsconfig.json

此时项目的结构应该是如此。

文件说明

├── README.md:在根目录下有一个名为README.md的文件。
├── node_modules:这是一个文件夹,通常包含项目的依赖库。
| ├── @reduxjs:在node_modules文件夹内,有一个名为@reduxjs的子文件夹,可能是Redux状态管理库的一部分。
| ├── @rsbuild@rsbuild 文件夹,可能是一个与项目构建相关的库或工具。
| ├── @types@types 文件夹,通常包含 TypeScript 类型定义文件,用于提供库的类型信息。
├── out.txt:根目录下的另一个文件。
├── package.json:项目的配置文件,包含项目的元数据和依赖信息。
├── pnpm-lock.yaml:如果项目使用pnpm包管理器,这个文件会锁定依赖的具体版本。
├── rsbuild.config.ts:一个配置文件,可能是rsbuild工具的配置文件。
├── src:这是存放项目源代码的文件夹。
| ├── App.css:在src目录下,有一个App.css文件,可能是应用的样式文件。
| ├── App.tsx:App.tsx文件,可能是 React 组件文件。
| ├── api:api文件夹,可能包含与后端服务交互的接口文件。
| | ├── api.ts:一个api.ts文件,可能包含 API 请求的逻辑。
| | └── index.ts:index.ts文件,可能是api文件夹的入口文件。
| ├── env.d.ts:环境声明文件,用于声明开发环境所需的类型和模块。
| ├── index.tsx:入口文件,可能是 React 应用的根组件。
| ├── pages:页面文件夹,可能包含应用的不同页面组件。
| | ├── addRecord:addRecord页面,可能包含添加记录的组件。
| | | └── index.tsx:addRecord页面的入口文件。
| | ├── home:home页面,可能包含主页面的组件。
| | | └── index.tsx:home页面的入口文件。
| | ├── recordList:recordList页面,可能包含记录列表的组件。
| | | ├── month.tsx:处理按月份显示记录列表的组件。
| | | └── year.tsx:处理按年份显示记录列表的组件。
| | ├── register:register页面,可能用于用户注册。
| | | └── Register.tsx:register页面的组件。
| | └── signin:signin页面,可能用于用户登录。
| | └── index.tsx:signin页面的入口文件。
| ├── router:router文件夹,可能包含应用的路由配置。
| | └── index.tsx:router文件夹的入口文件。
| └── store:store文件夹,可能用于管理应用的状态。
| ├── index.ts:创建 store 的文件。
| └── modules:管理应用状态的模块文件。
| └── recordList.ts:recordList模块,可能用于管理记录列表的状态。
└── tsconfig.json:TypeScript 的配置文件。

router

结合前面的学习以及上面创建的页面, 来拉一下路由列表

import { createBrowserRouter } from 'react-router-dom'
import Register from '../pages/register/Register'
import Signin from '../pages/signin'
import Home from '../pages/home'
import AddRecord from '../pages/addRecord'
import RecordListYear from '../pages/recordList/year'
import RecordListMonth from '../pages/recordList/month'

const router = createBrowserRouter([
    {
        path: '/',
        element: <Home />
    },
    {
        path: '/sign-in',
        element: <Signin />
    },
    {
        path: '/register',
        element: <Register />
    },
    {
        path: '/add-record',
        element: <AddRecord />
    },
    {
        path: '/recodr-list',
        children: [
            {
                path: 'year',
                element: <RecordListYear />
            },
            {
                path: 'month',
                element: <RecordListMonth />
            },
        ]
    }
])

export default router

app.tsx中引入路由

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

const App = () => {
  return (
    <div className="content">
     <RouterProvider router={router} />
    </div>
  );
};

export default App;

此时启动项目, 路由已经能正常工作了