fenghuo/README.md

226 lines
6.3 KiB
Markdown
Raw Permalink Normal View History

2025-02-18 16:50:34 +08:00
[![GitHub][opengraph-image]][opengraph-image-url]
2025-02-18 15:35:03 +08:00
# shadcn/ui and tailwindcss v4 monorepo template
This template is for creating a monorepo with Turborepo, shadcn/ui, tailwindcss v4, and react v19.
2025-05-28 20:00:36 +08:00
## 项目结构
2025-05-28 20:00:36 +08:00
```
├── apps/
│ ├── backend/ # Hono 后端应用
│ └── web/ # Next.js 前端应用
├── packages/
│ ├── db/ # Prisma 数据库包
│ ├── storage/ # 存储解决方案包
│ ├── tus/ # TUS 上传协议包
│ └── ui/ # UI 组件包
└── docs/ # 文档
```
2025-05-28 20:00:36 +08:00
## 特性
2025-02-18 15:35:03 +08:00
2025-05-28 20:00:36 +08:00
- 🚀 **现代技术栈**: Next.js 15, React 19, Hono, Prisma
- 📦 **Monorepo**: 使用 Turborepo 管理多包项目
- 🎨 **UI 组件**: shadcn/ui + TailwindCSS v4
- 📤 **文件上传**: 支持 TUS 协议的可恢复上传
- 💾 **多存储支持**: 本地存储 + S3 兼容存储
- 🗄️ **数据库**: PostgreSQL + Prisma ORM
- 🔄 **实时通信**: WebSocket 支持
2025-02-18 15:35:03 +08:00
2025-05-28 20:00:36 +08:00
## 快速开始
### 1. 安装依赖
2025-02-18 15:35:03 +08:00
```bash
pnpm install
2025-05-28 20:00:36 +08:00
```
### 2. 环境变量配置
复制环境变量模板并配置:
```bash
cp .env.example .env
```
#### 存储配置
**本地存储(开发环境推荐):**
```bash
STORAGE_TYPE=local
UPLOAD_DIR=./uploads
```
**S3 存储(生产环境推荐):**
```bash
STORAGE_TYPE=s3
S3_BUCKET=your-bucket-name
S3_REGION=us-east-1
S3_ACCESS_KEY_ID=your-access-key
S3_SECRET_ACCESS_KEY=your-secret-key
```
**MinIO 本地开发:**
```bash
STORAGE_TYPE=s3
S3_BUCKET=uploads
S3_ENDPOINT=http://localhost:9000
S3_ACCESS_KEY_ID=minioadmin
S3_SECRET_ACCESS_KEY=minioadmin
S3_FORCE_PATH_STYLE=true
```
详细的环境变量配置请参考:[环境变量配置指南](./docs/ENVIRONMENT.md)
### 3. 数据库设置
```bash
# 生成 Prisma 客户端
pnpm db:generate
# 运行数据库迁移
pnpm db:migrate
# 填充种子数据(可选)
pnpm db:seed
```
### 4. 启动开发服务器
```bash
pnpm dev
2025-02-18 15:35:03 +08:00
```
2025-05-28 20:00:36 +08:00
这将启动:
- 前端应用: http://localhost:3001
- 后端 API: http://localhost:3000
- 文件上传: http://localhost:3000/upload
- 存储管理 API: http://localhost:3000/api/storage
## 存储包 (@repo/storage)
项目包含一个功能完整的存储解决方案包,支持:
### 核心功能
- 🗂️ **多存储后端**: 本地文件系统、AWS S3、MinIO、阿里云 OSS、腾讯云 COS
- 📤 **TUS 上传**: 支持可恢复的大文件上传
- 🔧 **Hono 集成**: 提供即插即用的中间件
- 📊 **文件管理**: 完整的文件生命周期管理
-**自动清理**: 过期文件自动清理机制
- 🔄 **存储迁移**: 支持不同存储类型间的数据迁移
### API 端点
```bash
# 文件资源管理
GET /api/storage/resources # 获取所有资源
GET /api/storage/resource/:fileId # 获取文件信息
DELETE /api/storage/resource/:id # 删除资源
# 文件访问和下载
GET /download/:fileId # 文件下载和访问(支持所有存储类型)
# 统计和管理
GET /api/storage/stats # 获取统计信息
POST /api/storage/cleanup # 清理过期文件
POST /api/storage/migrate-storage # 迁移存储类型
# 文件上传 (TUS 协议)
POST /upload # 开始上传
PATCH /upload/:id # 续传文件
HEAD /upload/:id # 获取上传状态
```
### 使用示例
```typescript
import { createStorageApp, startCleanupScheduler } from '@repo/storage';
// 创建存储应用
const storageApp = createStorageApp({
apiBasePath: '/api/storage',
uploadPath: '/upload',
});
// 挂载到主应用
app.route('/', storageApp);
// 启动清理调度器
startCleanupScheduler();
```
## One-click Deploy
You can deploy this template to Vercel with the button below:
[![Deploy with Vercel](https://vercel.com/button)](https://vercel.com/new/clone?build-command=cd+..%2F..%2F+%26%26+pnpm+turbo+build+--filter%3Dweb...&demo-description=This+is+a+template+Turborepo+with+ShadcnUI+tailwindv4&demo-image=%2F%2Fimages.ctfassets.net%2Fe5382hct74si%2F2JxNyYATuuV7WPuJ31kF9Q%2F433990aa4c8e7524a9095682fb08f0b1%2FBasic.png&demo-title=Turborepo+%26+Next.js+Starter&demo-url=https%3A%2F%2Fexamples-basic-web.vercel.sh%2F&from=templates&project-name=Turborepo+%26+Next.js+Starter&repository-name=turborepo-shadcn-tailwind&repository-url=https%3A%2F%2Flinkb15%2Fturborepo-shadcn-ui-tailwind-4&root-directory=apps%2Fweb&skippable-integrations=1)
## 添加 UI 组件
2025-02-18 15:35:03 +08:00
To add components to your app, run the following command at the root of your `web` app:
```bash
pnpm dlx shadcn@latest add button -c apps/web
2025-02-18 15:35:03 +08:00
```
This will place the ui components in the `packages/ui/src/components` directory.
## Tailwind
Your `globals.css` are already set up to use the components from the `ui` package which is imported in the `web` app.
2025-02-18 15:35:03 +08:00
2025-05-28 20:00:36 +08:00
## 使用组件
2025-02-18 15:35:03 +08:00
To use the components in your app, import them from the `ui` package.
```tsx
2025-05-26 19:56:34 +08:00
import { Button } from '@repo/ui/components/ui/button';
2025-02-18 15:35:03 +08:00
```
2025-02-18 16:50:34 +08:00
2025-05-28 20:00:36 +08:00
## 脚本命令
```bash
# 开发
pnpm dev # 启动所有应用
pnpm dev:web # 只启动前端
pnpm dev:backend # 只启动后端
# 构建
pnpm build # 构建所有包
pnpm build:web # 构建前端
pnpm build:backend # 构建后端
# 数据库
2025-06-05 15:44:06 +08:00
pnpm db:generate # 运行数据库迁移
2025-05-28 20:00:36 +08:00
pnpm db:seed # 填充种子数据
pnpm db:studio # 打开 Prisma Studio
# 代码质量
pnpm lint # 代码检查
pnpm type-check # 类型检查
pnpm format # 代码格式化
```
## 文档
- [环境变量配置指南](./docs/ENVIRONMENT.md)
- [存储包文档](./packages/storage/README.md)
- [文件访问使用指南](./docs/STATIC_FILES.md)
2025-02-18 17:55:02 +08:00
## More Resources
- [shadcn/ui - Monorepo](https://ui.shadcn.com/docs/monorepo)
- [Turborepo - shadcn/ui](https://turbo.build/repo/docs/guides/tools/shadcn-ui)
- [TailwindCSS v4 - Explicitly Registering Sources](https://tailwindcss.com/docs/detecting-classes-in-source-files#explicitly-registering-sources)
2025-05-28 20:00:36 +08:00
- [Hono Documentation](https://hono.dev/)
- [TUS Protocol](https://tus.io/)
2025-02-18 17:55:02 +08:00
2025-02-18 16:50:34 +08:00
[opengraph-image]: https://turborepo-shadcn-tailwind.vercel.app/opengraph-image.png
[opengraph-image-url]: https://turborepo-shadcn-tailwind.vercel.app/