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

本文主要是介绍手把手教你用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)

项目模板地址

传送门

这篇关于手把手教你用vite+React18+TS+redux+prettier+eslint+Ant打造企业级前端项目的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1106377

相关文章

一文教你如何将maven项目转成web项目

《一文教你如何将maven项目转成web项目》在软件开发过程中,有时我们需要将一个普通的Maven项目转换为Web项目,以便能够部署到Web容器中运行,本文将详细介绍如何通过简单的步骤完成这一转换过程... 目录准备工作步骤一:修改​​pom.XML​​1.1 添加​​packaging​​标签1.2 添加

tomcat多实例部署的项目实践

《tomcat多实例部署的项目实践》Tomcat多实例是指在一台设备上运行多个Tomcat服务,这些Tomcat相互独立,本文主要介绍了tomcat多实例部署的项目实践,具有一定的参考价值,感兴趣的可... 目录1.创建项目目录,测试文China编程件2js.创建实例的安装目录3.准备实例的配置文件4.编辑实例的

Vue中组件之间传值的六种方式(完整版)

《Vue中组件之间传值的六种方式(完整版)》组件是vue.js最强大的功能之一,而组件实例的作用域是相互独立的,这就意味着不同组件之间的数据无法相互引用,针对不同的使用场景,如何选择行之有效的通信方式... 目录前言方法一、props/$emit1.父组件向子组件传值2.子组件向父组件传值(通过事件形式)方

css中的 vertical-align与line-height作用详解

《css中的vertical-align与line-height作用详解》:本文主要介绍了CSS中的`vertical-align`和`line-height`属性,包括它们的作用、适用元素、属性值、常见使用场景、常见问题及解决方案,详细内容请阅读本文,希望能对你有所帮助... 目录vertical-ali

springboot集成Deepseek4j的项目实践

《springboot集成Deepseek4j的项目实践》本文主要介绍了springboot集成Deepseek4j的项目实践,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价... 目录Deepseek4j快速开始Maven 依js赖基础配置基础使用示例1. 流式返回示例2. 进阶

SpringBoot项目启动报错"找不到或无法加载主类"的解决方法

《SpringBoot项目启动报错找不到或无法加载主类的解决方法》在使用IntelliJIDEA开发基于SpringBoot框架的Java程序时,可能会出现找不到或无法加载主类com.example.... 目录一、问题描述二、排查过程三、解决方案一、问题描述在使用 IntelliJ IDEA 开发基于

SpringBoot项目使用MDC给日志增加唯一标识的实现步骤

《SpringBoot项目使用MDC给日志增加唯一标识的实现步骤》本文介绍了如何在SpringBoot项目中使用MDC(MappedDiagnosticContext)为日志增加唯一标识,以便于日... 目录【Java】SpringBoot项目使用MDC给日志增加唯一标识,方便日志追踪1.日志效果2.实现步

浅析CSS 中z - index属性的作用及在什么情况下会失效

《浅析CSS中z-index属性的作用及在什么情况下会失效》z-index属性用于控制元素的堆叠顺序,值越大,元素越显示在上层,它需要元素具有定位属性(如relative、absolute、fi... 目录1. z-index 属性的作用2. z-index 失效的情况2.1 元素没有定位属性2.2 元素处

Python实现html转png的完美方案介绍

《Python实现html转png的完美方案介绍》这篇文章主要为大家详细介绍了如何使用Python实现html转png功能,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 1.增强稳定性与错误处理建议使用三层异常捕获结构:try: with sync_playwright(

Vue 调用摄像头扫描条码功能实现代码

《Vue调用摄像头扫描条码功能实现代码》本文介绍了如何使用Vue.js和jsQR库来实现调用摄像头并扫描条码的功能,通过安装依赖、获取摄像头视频流、解析条码等步骤,实现了从开始扫描到停止扫描的完整流... 目录实现步骤:代码实现1. 安装依赖2. vue 页面代码功能说明注意事项以下是一个基于 Vue.js