一个使用 Antd 的 react 模板
笔记中使用 Node 版本为
22.21.1
使用 Vite 作为构建工具. 基本步骤:
- 安装包与依赖
- 配置路径别名
@ - 配置
vscode折叠 - 配置环境
.env - 配置路由表
npm create vite@latest
npm i http-server -D
npm i tailwindcss @tailwindcss/vite
npm i sass -D
npm i classnames -S
npm i vitest -D
npm i debug -S
npm i @types/debug -D
npm i lodash-es -S
npm i @types/lodash-es -D
npm i mockjs -S
npm i @types/mockjs -D
npm i axios -S
npm i antd -S
npm i @ant-design/icons@6.x -S
npm i dayjs -S
npm i react-router -S
1. 新建项目并整理代码文件
创建项目的命令
npm create vite@latest
然后脚手架会先后提示
- 项目名称 (Project name)
- 使用什么模板 (Select a framework):
React - 使用什么架构 (主要是 TS 等):
TypeScript + React Compiler - 然后询问是否使用
rolldown-vite - 最后是询问是否安装依赖包, 并运行.

最后项目就可以跑起来了.
清理一下代码结构, src 下仅保留 src/main.tsx, 这是组件的入口. 以及 App.tsx, 这个是渲染的第一个组件. 根据需要可以将其替换.

// main.tsx
import { StrictMode } from 'react'
import { createRoot } from 'react-dom/client'
import App from './App.tsx'
createRoot(document.getElementById('root')!).render(
<StrictMode>
<App />
</StrictMode>,
)
// App.tsx
const App = () => <h1>Hello React</h1>
export default App

1.1 配置路径别名
在 tsconfig.app.json 中添加路径别名, 以及基路径:
{
"compilerOptions": {
"baseUrl": ".",
"paths": {
"@/*": ["src/*"]
}
}
}
在 vite.config.ts 中导入 fileURLToPath, 添加路径别名配置:
import { fileURLToPath } from 'node:url'
export default defineConfig({
resolve: {
alias: {
'@': fileURLToPath(new URL('./src', import.meta.url))
}
}
})
2. 调整代码结构(vsCode 配置)
基本步骤:
- 新建
.vscode目录, 创建settings.json文件, 添加折叠代码配置 - 分别创建
.env,.env.development, 以及.env.production文件, 对开发环境与生成环境分别进行配置. - 修改
package.json的scripts节点, 在运行命令后添加--mode development或--mode production来区别配置. - 在
src目录中添加vite-env.d.ts来定义配置数据的类型. 详细配置可以参考文档.
// .vscode/settings.json 的配置
{
"explorer.fileNesting.enabled": true,
"explorer.fileNesting.patterns": {
"*.ts": "${capture}.js",
"*.js": "${capture}.js.map, ${capture}.min.js, ${capture}.d.ts",
"*.jsx": "${capture}.js",
"*.tsx": "${capture}.ts",
"tsconfig.json": "tsconfig.*.json",
"package.json": "package-lock.json, yarn.lock, pnpm-lock.yaml, bun.lockb, bun.lock",
".env": ".env.*",
}
}

类型定义
// src/vite-env.d.ts
/// <reference types="vite/client" />
interface ViteTypeOptions {
// 添加这行代码,你就可以将 ImportMetaEnv 的类型设为严格模式,
// 这样就不允许有未知的键值了。
// strictImportMetaEnv: unknown
}
interface ImportMetaEnv {
/** 运行环境名 */
readonly VITE_MODE: string
// 更多环境变量...
}
interface ImportMeta {
readonly env: ImportMetaEnv
}

"scripts": {
"dev": "vite --mode development",
"build": "tsc -b && vite build --mode production",
},
在 main.tsx 执行打印环境信息: console.log(环境: %s, import.meta.env.VITE_MODE)

安装 http-server, 然后构建后, 进入 dist 目录, 再部署一次静态文件查看:
npm i http-server -D
npm run build
cd dist
npx http-server -o

运行的结果为

必要时修改 vite.config.ts 文件, 启用自定义的 IP 与端口号:
export default defineConfig({
server: {
host: true,
port: 3000,
}
})

3. 安装样式工具
推荐使用 tailwind CSS, 必要是使用 Sass 来补充. 依次安装:
npm i tailwindcss @tailwindcss/vite
npm i sass -D
npm i classnames -S
修改 vite.config.ts, 导入 tailwindcss 插件并配置:
import tailwindcss from '@tailwindcss/vite'
export default defineConfig({
plugins: [
tailwindcss(),
],
})
然后在全局 css 文件中导入即可. 可以在 main.tsx 所在目录创建 index.css 文件, 并填入:
@import "tailwindcss";
然后在 main.tsx 中导入即可:
import './index.css'
然后在页面中可以立即演示:


3.1 使用 sass 与 classnames
样式使用模块化的方式编码.
- 创建
module.scss后缀的样式文件名. 编写scss代码. - 使用
classnames的绑定模式, 加载样式.


运行结果为:

4. 安装其他工具
npm i vitest -D # 用于单元测试
npm i debug # 用于打印日志
npm i @types/debug -D
npm i lodash-es # 辅助工具方法
npm i @types/lodash-es -D
npm i mockjs # 模拟数据
npm i @types/mockjs -D
npm i axios # 请求
5. 安装 antd
antd默认就支持按需加载.
- 安装
antd与@ant-design/icons@6.x安装必要的组件. - 安装
dayjs来配置时间工具. - 配置
ConfigProvider.
npm i antd -S
npm i @ant-design/icons@6.x -S
npm i dayjs -S
然后修改入口文件 main.tsx
import { StrictMode } from 'react'
import { createRoot } from 'react-dom/client'
import { ConfigProvider } from 'antd'
import zhCN from 'antd/locale/zh_CN'
import App from './App.tsx'
import './index.css'
import dayjs from 'dayjs'
import 'dayjs/locale/zh-cn'
dayjs.locale('zh-cn')
console.log(`环境: %s`, import.meta.env.VITE_MODE)
createRoot(document.getElementById('root')!).render(
<StrictMode>
<ConfigProvider locale={zhCN}>
<App />
</ConfigProvider>
</StrictMode>,
)
然后就可以在需要的组件中, 导入并使用了.
import ClassName from 'classnames/bind'
import styles from './App.module.scss'
import { Button, message, Space } from 'antd'
const cx = ClassName.bind(styles)
const testClickHandler = () => {
message.info('一段测试')
}
const App = () => <>
<h1 className="text-2xl font-bold text-red-500">Hello React</h1>
<h2 className={cx('jk-container')}>Hello React 2</h2>
<div className="my-4">
<Space>
<Button onClick={testClickHandler}>默认按钮</Button>
</Space>
</div>
</>
export default App
运行结果为:

6. 导入路由
npm i react-router
配置路由:
- 在
src目录下创建routers目录, 并创建index.ts文件. - 定义路由对象:
- 从
react-router导入createBrowserRouter. - 调用
createBrowserRouter配置路由表, 并导出结果. - 将原有的
App组件移除, 定义成其他组件, 创建文件夹views, 集中放置页面组件. - 将原有
App组件定义到路由表中.
- 从
- 重写入口模块
main.tsx- 从
antd导入App组件. - 从
react-router中导入RouterProvider组件. - 导入路由表.
- 从
定义路由表:
// 将原有 App.tsx 重新命名为 TestPage, 然后放在 `@/views` 目录中
import { lazy } from 'react'
import { createBrowserRouter } from 'react-router'
export default createBrowserRouter([
{
path: '/test-page',
Component: lazy(() => import('@/views/TestPage/TestPage'))
},
])
修改入口文件:
import { StrictMode } from 'react'
import { createRoot } from 'react-dom/client'
import { ConfigProvider, App } from 'antd'
import { RouterProvider } from 'react-router'
import router from '@/routers'
import zhCN from 'antd/locale/zh_CN'
import './index.css'
import dayjs from 'dayjs'
import 'dayjs/locale/zh-cn'
dayjs.locale('zh-cn')
console.log(`环境: %s`, import.meta.env.VITE_MODE)
createRoot(document.getElementById('root')!).render(
<StrictMode>
<ConfigProvider locale={zhCN}>
<App>
<RouterProvider router={router} />
</App>
</ConfigProvider>
</StrictMode>,
)
单纯从运行上没有区别, 但是注意路由表 test-page, 如果按照以前的访问:

修改地址后:

至此基本工具已配置完成.