手把手教你用vite+React18+TS+redux+prettier+eslint+Ant打造企业级前端项目

通过这篇文章你可以学到

  • 如何使用使用 webpack 搭建项目
  • 如何在 webpack中集成 typescript
  • 如何在 webpack 中集成 React Router 和 Redux
  • 如何使用 React 的组件库 Ant Design
  • 如何在项目中集成 eslint 和 prettier 保证代码质量
  • 如何为团队开发专属的项目模板

环境依赖版本

  • node:v18.13.0npm -v
  • vite:^4.4.5
  • React:^18.2.0
  • typescript:^5.0.2
  • Redux:^4.2.1
  • React-router:^6.15.0"
  • Ant-design:^5.8.3
  • eslint:^8.47.0
  • prettier:^3.0.1
  • normalize.css:^8.0.1
  • npm:9.8.1

快速查看

  • 仓库地址

1.初始化项目

按步骤提示初始化:

  1. 使用 React-cli 创建命令

npm init vite@latest  xxxx(项目名) --template react-ts//示例:
npm init vite@latest vite-React-ts-Redux --template react-ts

注意:我们这里要把命令中的项目名改成自己将要创建的项目名

  1. 选择一个框架(react)
? Select a framework: » - Use arrow-keys. Return to submit.VanillaVue
>   ReactPreactLitSvelteSolidQwikOthers
  1. 使用 typescript
? Select a variant: » - Use arrow-keys. Return to submit.
>   TypeScriptTypeScript + SWCJavaScriptJavaScript + SWC
  1. 启动项目
vite-React-ts-Redux && pnpm install && pnpm run dev

快速初始化(建议使用):

# pnpm
pnpm init vite@latest project-name --template react-ts# npm 
npm init vite@latest project-name --template react-ts

2.配置别名

  1. vite.config.js文件添加路径别名配置
import { defineConfig } from 'vite'
import react from '@vitejs/plugin-react'
import path from 'path' //导入Path模块// https://vitejs.dev/config/
export default defineConfig({plugins: [react()],// 路径别名resolve: {alias: {'@': path.resolve(__dirname, 'src') // 配置 @ 别名指向 src 文件夹}}
})
  1. tsconfig.json文件添加路径别名声明,以便ts识别路径别名
{"compilerOptions": {"target": "ES2020","useDefineForClassFields": true,"lib": ["ES2020", "DOM", "DOM.Iterable"],"module": "ESNext","skipLibCheck": true,/* Bundler mode */"moduleResolution": "bundler","allowImportingTsExtensions": true,"resolveJsonModule": true,"isolatedModules": true,"noEmit": true,"jsx": "react",/* Linting */"strict": true,"noUnusedLocals": true,"noUnusedParameters": true,"noFallthroughCasesInSwitch": true,// 路径别名"baseUrl": "./src","paths": {"@/*": ["*"]}},"include": ["src"],"references": [{ "path": "./tsconfig.node.json" }]
}

3.重置浏览器默认样式的 CSS 文件,兼容不同平台

安装

安装 normalize.css文件

npm install normalize.css

使用

安装之后 引入到我们的项目中.在我们的main.tsx文件中进行引入

@import 'normalize.css';

代码质量风格的统一

这里我们使用prettier 和 eslint 实现我们的格式化和校验

4.配置prettier

安装

首先我们要在项目中安装 prettier

npm install prettier -D

使用

  1. 安装完成后,我们需要创建.prettierrc文件,并且配置一些我们项目所需要的格式
{"useTabs": false,"tabWidth": 2,"printWidth": 80,"singleQuote": true,"trailingComma": "none","semi": false,"endOfLine": "lf"
}
  1. 配置一个忽略文件 不让prettier格式化

    我们需要创建完成.prettierrc文件创建后,我们还需创建.prettierignore文件,文件的作用是声明在项目中不需要prettier格式化的文件。

/build/*
.local
.output.js
.eslintrc.js
.editorconfig
/node_modules/****/*.svg
**/*.sh/public/*
  1. package.json中配置prettier的运行命令

    在script字段中添加配置项: “prettier”:“prettier --write .”

    只要我们在控制台运行npm run prettier 即可把所有文件使用prettier格式化

  "scripts": {"dev": "vite","build": "tsc && vite build","preview": "vite preview","prettier": "prettier --write .",},
  1. 在vscode 配置默认prettier(仅仅针对vscode编辑器)

    vscode 配置默认prettier 快捷键‘ctrl+, ’ 搜索editor default 勾选code fomatter为prettier (要先在vscode下载插件prettier)

5.配置eslint

安装

首先我们要在项目中安装eslint

npm install eslint --save-dev

使用

安装完成后,我们需要创建一个.eslintrc.cjs文件。并且配置一些我们项目所需要的校验

module.exports = {env: {browser: true,es2021: true,node: true},settings: {react: {version: 'detect'}},extends: ['eslint:recommended','plugin:@typescript-eslint/recommended','plugin:react/recommended','plugin:prettier/recommended'],overrides: [{env: {node: true},files: ['.eslintrc.{js,cjs}'],parserOptions: {sourceType: 'script'}}],parser: '@typescript-eslint/parser',parserOptions: {ecmaVersion: 'latest',sourceType: 'module'},plugins: ['@typescript-eslint', 'react'],rules: {'@typescript-eslint/no-var-requires': 'off','@typescript-eslint/no-explicit-any': 'off'}
}```3. 在`package.json`中配置Eslint的运行命令在script字段中添加配置项:  "lint": "eslint ."只要我们在控制台运行npm run lint 即可检测所有文件的格式是否正确```js"scripts": {"dev": "vite","build": "tsc && vite build","preview": "vite preview","prettier": "prettier --write .","lint": "eslint ."},

结合eslint和prettier

安装

npm install eslint-plugin-prettier eslint-config-prettier -D

使用

我们需要在.eslint.js配置 添加插件配置

extends"plugin:prettier/recommended"

此时就能成功实现prettier显示报错 并结合eslint

6.配置路由:

安装

 npm install react-router-dom

使用

  1. 声明一个ts组件,来匹配我们的路由。首先我们需要在项目的src文件夹中创建views文件夹,然后在views文件夹中创建home文件和index.tsx文件,在home文件夹中创建Component文件夹,在Component文件夹里创建Home.tsx

image.png

  1. 配置我们的home页组件

Home.tsx

import React, { memo } from 'react'
import type { ReactNode, FC } from 'react'interface IProps {children?: ReactNode
}const Home: FC<IProps> = () => {return <div>我是home页</div>
}export default memo(Home)
  1. 配置我们的home页index出口文件

index.tsx

import Home from './Component/Home'export default Home
  1. 然后我们需要在项目的src文件夹中创建route文件夹,然后在route文件夹中建立index.tsx文件。

  2. 因为我们要引入组件,所有我们需要创建tsx而不是ts文件。

  3. 配置我们的路由文件

//route/index.tsximport React from 'react'
import { createBrowserRouter } from 'react-router-dom'
import { lazy } from 'react'
//引入懒加载的形式:
const Home = lazy(() => import('@/views/home/index.tsx'))const routes = createBrowserRouter([{path: '/',element: <Home />, //(xxx组件)children: [//xxx  多级路由配置]}
])export default routes
  1. 在我们的App.tsx中引入路由,进行使用
//App.tsximport React from 'react'
import { RouterProvider } from 'react-router-dom'
import routes from '@/router'return <RouterProvider router={routes} />
}export default App

7.配置redux

安装

npm install @reduxjs/toolkit

使用

  1. 声明一个ts组件,来存放我们的数据。首先我们需要在项目的src文件夹中创建store文件夹,然后在store文件夹中创建index.ts文件,

image.png

  1. 配置我们的Redux文件

index.ts

import { configureStore } from '@reduxjs/toolkit'
// 初始化数据
const initialState = {name: 'zayyo',}
// Reducer:定义如何更新状态
const rootReducer = (state = initialState, action: any) => {// 根据 action 类型来更新状态// 返回新的状态return state
}
// 创建store
const store = configureStore({reducer: rootReducer
})
export default store
  1. 然后配置我们的App.tsx文件,使得我们整个项目都能使用Redux

App.tsx

import React from 'react'
import { RouterProvider } from 'react-router-dom'
import routes from '@/router'
//引入provide组件进行包裹
import { Provider } from 'react-redux'
import store from './store'function App() {return (//引入provide组件进行包裹<Provider store={store}><RouterProvider router={routes} /></Provider>)
}export default App
  1. 在组件中使用我们的Redux数据
    Home.tsx
import React, { memo } from 'react'
import type { ReactNode, FC } from 'react'
//导入useSelector可以将Redux 的状态集成到 React 组件中,使得组件能够订阅特定的状态,并在状态发生变化时进行更新
import { useSelector } from 'react-redux'interface IProps {children?: ReactNode
}
interface RootState {name: string// 其他属性...
}const Home: FC<IProps> = () => {const data = useSelector((state: RootState) => state.name) // 替换为您的状态属性路径return (<div>我是home页<div>{data}</div></div>)
}export default memo(Home)

8.引入Ant Design组件

安装

安装Ant Design包

$ npm install antd --save

使用

我们在Home。tsx组件中进行使用

import React, { memo } from 'react'
import type { ReactNode, FC } from 'react'
import { useSelector } from 'react-redux'
//引入我们要使用的组件
import { Button } from 'antd'interface IProps {children?: ReactNode
}
interface RootState {name: string// 其他属性...
}const Home: FC<IProps> = () => {const data = useSelector((state: RootState) => state.name) // 替换为您的状态属性路径return (<div>我是home页<div>{data}</div>//使用组件<Button type="primary">Button</Button></div>)
}export default memo(Home)

项目模板地址

传送门

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/52283.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Hive SQL语言

目录 Hive SQL之数据库与建库 create database :创建数据库 use database :选择特定的数据库 drop database :删除数据库 Hive SQL之表与建表 create table : 创建表 分隔符指定语法 Hive SQL-DML-Load加载数据 Load语法功能 语法规则之filepath 语法规则之LOCAL …

spring揭秘09-aop03-aop织入器织入横切逻辑与自动织入

文章目录 【README】【1】spring aop的织入【1.1】使用ProxyFactory 作为织入器【1.2】基于接口的代理&#xff08;JDK动态代理&#xff0c;目标类实现接口&#xff09;【补充】 【1.2】基于类的代理&#xff08;CGLIB动态代理&#xff0c;目标类没有实现接口&#xff09;【1.2…

数据缓存软件Redis推出Redis 8 这更改许可证后首个重大版本更新

2024 年 3 月流行的数据库缓存应用 Redis 宣布修改开源许可证&#xff0c;此次修改许可证的目的本质上就是避免大型云计算公司白嫖&#xff0c;例如亚马逊的 AWS 等。AWS 等云计算服务商基于 Redis 推出托管服务并向客户收费&#xff0c;作为开发商 Redis 并没有获得收益&#…

阿里云CentOs ClickHouse安装

&#x1f339;作者主页&#xff1a;青花锁 &#x1f339;简介&#xff1a;Java领域优质创作者&#x1f3c6;、Java微服务架构公号作者&#x1f604; &#x1f339;简历模板、学习资料、面试题库、技术互助 &#x1f339;文末获取联系方式 &#x1f4dd; ClickHouse安装目录 前言…

easypoi模板导出word并且合并行

导出流程 引入依赖制作模板合并导出 引入依赖 <dependency><groupId>cn.afterturn</groupId><artifactId>easypoi-base</artifactId><version>4.1.2</version> </dependency>制作模板 合并行是备注那一列&#xff0c;这一列…

YOLOv8目标检测推理流程及Python代码

在这章中将介绍目标检测推理原理,以及基于onnx模型使用Python语言进行推理。在推理原理章节中,将了解onnx模型的输入和输出,对输入的图片需要进行预处理的操作,对输出的结果需要进行后处理的操作等;在Python代码篇,将给出推理代码。 这里注意一下的是,由于在导出onnx模型…

DRF——pagination分页模块

文章目录 分页继承APIView类用法1.PageNumberPagination2.LimitOffsetPagination3.CursorPagination 继承GenericAPIView派生类用法1.PageNumberPagination2.LimitOffsetPagination3.CursorPagination 分页 在查看数据列表的API中&#xff0c;如果 数据量 比较大&#xff0c;肯…

嵌入式UI开发-lvgl+wsl2+vscode系列:9、控件(Widgets)(二)

一、前言 接下来我们总结第二部分的控件。 二、示例 1、image&#xff08;图像&#xff09; 1.1、示例1 #include "../../lv_examples.h" #if LV_USE_IMAGE && LV_BUILD_EXAMPLESvoid lv_example_image_1(void) {LV_IMAGE_DECLARE(img_cogwheel_argb);lv…

完成课题ssrf实现.SSH未创建写shell,同时完成其他漏洞复现

一、SSRF (Server-Side Request Forgery) 是一种网络安全漏洞&#xff0c;发生在服务器端应用程序中&#xff0c;允许攻击者通过服务器向任意网络资源发送请求&#xff0c;而无需用户直接参与。这种漏洞通常源于程序设计错误&#xff0c;例如当应用程序使用用户的输入作为URL请…

根据json字符串 自动生成 实体类 Model Entity .NET

①访问json2csharp的在线工具&#xff1a;http://json2csharp.com/ ②复制json字符串&#xff0c;粘贴到左边&#xff0c;按下面Convert按钮 ③右边就是 生成的 实体类 &#xff0c;直接复制到 .cs文件内就能使用 ④或者点击 Zip As File 按钮&#xff0c;直接生成 N个.cs文…

基于Springboot和BS架构的宠物健康咨询系统pf

TOC springboot509基于Springboot和BS架构的宠物健康咨询系统pf 第一章 课题背景及研究内容 1.1 课题背景 信息数据从传统到当代&#xff0c;是一直在变革当中&#xff0c;突如其来的互联网让传统的信息管理看到了革命性的曙光&#xff0c;因为传统信息管理从时效性&#x…

使用VRoid Studio二次元建模,创建专属于自己的二次元卡通人物模型,创建完全免费开源且属于自己VRM模型

最终效果 文章目录 最终效果什么是VRoid Studio官网地址下载安装VRoid Studio1、可以去它的官网下载2、steam安装 创建模型配置参数 导出模型使用别人的VRM模型这里我分享几个不错的模型&#xff0c;大家可以自行去下载 完结 什么是VRoid Studio 如果你玩过能捏脸的游戏你就能…

游戏开发设计模式之责任链模式

责任链模式&#xff08;Chain of Responsibility Pattern&#xff09;是一种行为型设计模式&#xff0c;它允许将请求沿着处理者链进行发送。每个处理者对象都有机会处理该请求&#xff0c;直到某个处理者决定处理该请求为止。 概念与定义 责任链模式的核心思想是将多个处理器…

【传输层协议】UDP协议 {端口号的范围划分;UDP数据报格式;UDP协议的特点;UDP的缓冲区;基于UDP的应用层协议}

一、再谈端口号 1.1 端口号标识网络进程 如何通过端口号找到主机上的网络进程&#xff1f; 在socket编程中bind绑定是最为重要的一步&#xff1a;他将套接字与指定的本地 IP 地址和端口号关联起来&#xff0c;这意味着指定的套接字可以接收来自指定 IP 地址和端口号的数据包…

前端宝典十:webpack性能优化最佳实践

Webpack 内置了很多功能。 通常你可用如下经验去判断如何配置 Webpack&#xff1a; 想让源文件加入到构建流程中去被 Webpack 控制&#xff0c;配置 entry&#xff1b;想自定义输出文件的位置和名称&#xff0c;配置 output&#xff1b;想自定义寻找依赖模块时的策略&#xff…

java swagger解析解决[malformed or unreadable swagger supplied]

原创不易&#xff0c;转载请注明出处&#xff1a; https://zhangxiaofan.blog.csdn.net/article/details/141498211 如果你想看完整的 利用swagger-parser解析yaml中的api请求类型、注释、接口名&#xff0c;可以参考这篇文章。 【Spring/Java项目】如何利用swagger-parser解析…

NC 最长上升子序列(三)

系列文章目录 文章目录 系列文章目录前言 前言 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站&#xff0c;这篇文章男女通用&#xff0c;看懂了就去分享给你的码吧。 描述 给定数组 arr…

OpenCV+Python识别机读卡

背景介绍 正常机读卡是通过读卡机读取识别结果的&#xff0c;目前OpenCV已经这么强大了&#xff0c;尝试着用OpenCVPython来识别机读卡。要识别的机读卡长这样&#xff1a; 我们做以下操作&#xff1a; 1.识别答题卡中每题选中项结果。 不做以下操作&#xff1a; 1.不识别准…

宝塔面板配置node/npm/yarn/pm2....相关全局变量 npm/node/XXX: command not found

1.打开终端 , cd 到根目录 cd / 2.跳转至node目录下,我的node版本是v16.14.2 cd /www/server/nodejs/v16.14.2/bin 2.1 如果不知道自己node版本多少就跳转到 cd /www/server/nodejs 然后查找当前目录下的文件 ls 确定自己的node版本 cd /node版本/bin 3.继续查看bin…

秋招突击——8/21——知识补充——计算机网络——cookie、session和token

文章目录 引言正文Cookie——客户端存储和管理Session——服务端存储和管理Token补充签名和加密的区别常见的加密算法和签名算法 面试题1、HTTP用户后续的操作&#xff0c;服务端如何知道属于同一个用户&#xff1f;如果服务端是一个集群机器怎么办&#xff1f;2、如果禁用了Co…