react+vite+pnpm+ts基础项目搭建

1. 项目初始化

pnpm create vite@latest my-react-app --template react-ts
cd my-react-app
pnpm install

2. 核心依赖安装

# 基础依赖
pnpm add react-router-dom @tanstack/react-query zustand axios

# UI 组件库 (任选其一)
pnpm add @mui/material @emotion/react @emotion/styled  # Material UI
# 或
pnpm add antd  # Ant Design

# 工具类
pnpm add @headlessui/react  # Headless UI
pnpm add @heroicons/react   # 图标库

# 开发工具
pnpm add eslint prettier eslint-config-prettier eslint-plugin-prettier @typescript-eslint/eslint-plugin @typescript-eslint/parser eslint-plugin-react-hooks -D
pnpm add husky lint-staged -D
pnpm add @types/node

3. 项目结构建议

src/
├─ api/              # API 请求封装
├─ assets/           # 静态资源
├─ components/       # 通用组件
│  ├─ ui/            # UI 基础组件
│  └─ shared/        # 业务共享组件
├─ features/         # 功能模块
├─ hooks/            # 自定义 hooks
├─ lib/              # 第三方库初始化/配置
├─ pages/            # 页面组件
├─ routes/           # 路由配置
├─ stores/           # 状态管理
├─ styles/           # 全局样式
├─ types/            # 类型定义
├─ utils/            # 工具函数
└─ App.tsx

4. 关键配置

vite.config.ts 优化
import { defineConfig } from 'vite'
import react from '@vitejs/plugin-react'
import path from 'path'

export default defineConfig({
  plugins: [react()],
  resolve: {
    alias: {
      '@': path.resolve(__dirname, './src'),
    }
  },
  server: {
    proxy: {
      '/api': {
        target: 'http://your-api-domain.com',
        changeOrigin: true,
        rewrite: (path) => path.replace(/^\/api/, '')
      }
    }
  }
})

5. 代码规范配置

.eslintrc.cjs
module.exports = {
  root: true,
  env: { browser: true, es2020: true },
  extends: [
    'eslint:recommended',
    'plugin:@typescript-eslint/recommended',
    'plugin:react-hooks/recommended',
    'plugin:prettier/recommended'
  ],
  parser: '@typescript-eslint/parser',
  plugins: ['react-refresh'],
  rules: {
    'react-refresh/only-export-components': 'warn',
    '@typescript-eslint/no-unused-vars': 'warn'
  },
}
.prettierrc
{
  "semi": false,
  "singleQuote": true,
  "printWidth": 100,
  "trailingComma": "all",
  "jsxSingleQuote": true,
  "arrowParens": "avoid"
}

6. Git Hooks 配置

package.json 添加:

{
  "scripts": {
    "prepare": "husky install",
    "lint": "eslint . --ext ts,tsx --fix",
    "format": "prettier --write ."
  },
  "lint-staged": {
    "*.{ts,tsx}": [
      "eslint --fix",
      "prettier --write"
    ]
  }
}

初始化 husky:

npx husky install
npx husky add .husky/pre-commit "npx lint-staged"

7. 推荐开发实践

  1. 组件设计

    • 使用原子设计模式组织组件
    • 组件与业务逻辑解耦
    • 合理使用Compound Components模式
  2. 状态管理

    • 优先使用 React 本地状态
    • 复杂状态使用 Zustand
    • 服务端状态使用 React Query
  3. 性能优化

    • 使用 React.memo 优化组件渲染
    • 虚拟列表优化长列表
    • 代码分割 + Suspense 延迟加载
  4. TypeScript 最佳实践

    • 严格模式开启
    • 使用 utility types (Pick, Omit, Partial等)
    • 类型定义优先使用 interface

8. 示例组件结构

// components/ui/Button.tsx
import { forwardRef } from 'react'
import clsx from 'clsx'

interface ButtonProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {
  variant?: 'primary' | 'secondary'
}

export const Button = forwardRef<HTMLButtonElement, ButtonProps>(
  ({ className, variant = 'primary', ...props }, ref) => {
    return (
      <button
        ref={ref}
        className={clsx(
          'rounded px-4 py-2 font-medium',
          variant === 'primary' && 'bg-blue-500 text-white',
          variant === 'secondary' && 'bg-gray-200 text-black',
          className
        )}
        {...props}
      />
    )
  }
)

Button.displayName = 'Button'

9. 启动项目

pnpm dev

10. 部署准备

pnpm build

推荐技术栈组合

  • 路由: React Router v6
  • 状态管理: Zustand + React Query
  • UI 库: Headless UI + 自定义 Tailwind 样式
  • 表单: React Hook Form
  • 测试: Vitest + Testing Library
  • 监控: Sentry
  • 部署: Vercel
### 如何使用 ViteReact 进行项目搭建与开发 #### 创建新项目 为了创建一个新的基于 ViteReact 项目,推荐的方式是通过官方提供的模板来快速启动。对于 TypeScript 支持的项目,可以执行如下命令: ```bash pnpm create vite app-client --template react-ts ``` 这条命令会初始化一个带有预设配置的新项目,其中包括了最新的 React 版本以及 TypeScript 设置[^3]。 #### 修改 `vite.config.ts` 文件中的别名设置 为了让开发者更方便地导入模块,在项目的根目录下找到并编辑 `vite.config.ts` 文件,添加路径别名以便简化文件引入路径。具体做法是在该文件内加入以下代码片段: ```typescript import { defineConfig } from 'vite' import react from '@vitejs/plugin-react' import path from 'path'; export default defineConfig({ plugins: [react()], resolve: { alias: { '@': path.resolve(__dirname, './src') } } }) ``` 这段配置使得在项目中可以通过 `'@/components/Button'` 来代替相对路径如 `'../../components/Button'` ,从而提高可读性和维护性[^5]。 #### 实现 Ant Design 组件库的语言本地化 如果计划在应用里集成 Ant Design UI 库,则可能需要调整其默认显示语言为中文。可以在入口文件(通常是 `main.tsx` 或者类似的文件)做相应修改: ```tsx import zhCN from 'antd/locale/zh_CN'; import { ConfigProvider } from 'antd'; // ...其他必要的 imports... ReactDOM.createRoot(document.getElementById('root')).render( <React.StrictMode> <ConfigProvider locale={zhCN}> <App /> </ConfigProvider> </React.StrictMode>, ); ``` 上述更改确保应用程序加载时自动切换到简体中文界面[^4]。 #### 启动开发服务器 完成以上步骤之后,回到终端窗口运行下面的指令开启本地开发环境: ```bash npm run dev ``` 这将会编译源码并且打开浏览器访问 http://localhost:3000 (端口号可能会有所不同),此时应该能够看到正在运行的应用程序实例[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值