通过这篇文章你可以学到
- 如何使用使用 webpack 搭建项目
- 如何在 webpack中集成 typescript
- 如何在 webpack 中集成 React Router 和 Redux
- 如何使用 React 的组件库 Ant Design
- 如何在项目中集成 eslint 和 prettier 保证代码质量
- 如何为团队开发专属的项目模板
环境依赖版本
node
:v18.13.0npm -vvite
:^4.4.5React
:^18.2.0typescript
:^5.0.2Redux
:^4.2.1React-router
:^6.15.0"Ant-design
:^5.8.3eslint
:^8.47.0prettier
:^3.0.1normalize.css
:^8.0.1npm
:9.8.1
快速查看
1.初始化项目
按步骤提示初始化:
- 使用 React-cli 创建命令
npm init vite@latest xxxx(项目名) --template react-ts
//示例:
npm init vite@latest vite-React-ts-Redux --template react-ts
注意:我们这里要把命令中的项目名改成自己将要创建的项目名
- 选择一个框架(react)
? Select a framework: » - Use arrow-keys. Return to submit.
Vanilla
Vue
> React
Preact
Lit
Svelte
Solid
Qwik
Others
- 使用 typescript
? Select a variant: » - Use arrow-keys. Return to submit.
> TypeScript
TypeScript + SWC
JavaScript
JavaScript + SWC
- 启动项目
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.配置别名
- 给
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 文件夹
}
}
})
- 给
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
使用
- 安装完成后,我们需要创建
.prettierrc
文件,并且配置一些我们项目所需要的格式
{
"useTabs": false,
"tabWidth": 2,
"printWidth": 80,
"singleQuote": true,
"trailingComma": "none",
"semi": false,
"endOfLine": "lf"
}
-
配置一个忽略文件 不让prettier格式化
我们需要创建完成
.prettierrc
文件创建后,我们还需创建.prettierignore
文件,文件的作用是声明在项目中不需要prettier格式化的文件。
/build/*
.local
.output.js
.eslintrc.js
.editorconfig
/node_modules/**
**/*.svg
**/*.sh
/public/*
-
在
package.json
中配置prettier的运行命令在script字段中添加配置项: “prettier”:“prettier --write .”
只要我们在控制台运行npm run prettier 即可把所有文件使用prettier格式化
"scripts": {
"dev": "vite",
"build": "tsc && vite build",
"preview": "vite preview",
"prettier": "prettier --write .",
},
-
在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
使用
- 声明一个ts组件,来匹配我们的路由。首先我们需要在项目的
src
文件夹中创建views
文件夹,然后在views
文件夹中创建home
文件和index.tsx
文件,在home
文件夹中创建Component
文件夹,在Component
文件夹里创建Home.tsx
- 配置我们的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)
- 配置我们的home页index出口文件
index.tsx
import Home from './Component/Home'
export default Home
-
然后我们需要在项目的
src
文件夹中创建route
文件夹,然后在route
文件夹中建立index.tsx
文件。 -
因为我们要引入组件,所有我们需要创建tsx而不是ts文件。
-
配置我们的路由文件
//route/index.tsx
import 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
- 在我们的
App.tsx
中引入路由,进行使用
//App.tsx
import 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
使用
- 声明一个ts组件,来存放我们的数据。首先我们需要在项目的
src
文件夹中创建store
文件夹,然后在store
文件夹中创建index.ts
文件,
- 配置我们的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
- 然后配置我们的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
- 在组件中使用我们的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)