[![GitHub][opengraph-image]][opengraph-image-url] # shadcn/ui and tailwindcss v4 monorepo template This template is for creating a monorepo with Turborepo, shadcn/ui, tailwindcss v4, and react v19. ## 项目结构 ``` ├── apps/ │ ├── backend/ # Hono 后端应用 │ └── web/ # Next.js 前端应用 ├── packages/ │ ├── db/ # Prisma 数据库包 │ ├── storage/ # 存储解决方案包 │ ├── tus/ # TUS 上传协议包 │ └── ui/ # UI 组件包 └── docs/ # 文档 ``` ## 特性 - 🚀 **现代技术栈**: Next.js 15, React 19, Hono, Prisma - 📦 **Monorepo**: 使用 Turborepo 管理多包项目 - 🎨 **UI 组件**: shadcn/ui + TailwindCSS v4 - 📤 **文件上传**: 支持 TUS 协议的可恢复上传 - 💾 **多存储支持**: 本地存储 + S3 兼容存储 - 🗄️ **数据库**: PostgreSQL + Prisma ORM - 🔄 **实时通信**: WebSocket 支持 ## 快速开始 ### 1. 安装依赖 ```bash pnpm install ``` ### 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 ``` 这将启动: - 前端应用: 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 组件 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 ``` 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. ## 使用组件 To use the components in your app, import them from the `ui` package. ```tsx import { Button } from '@repo/ui/components/ui/button'; ``` ## 脚本命令 ```bash # 开发 pnpm dev # 启动所有应用 pnpm dev:web # 只启动前端 pnpm dev:backend # 只启动后端 # 构建 pnpm build # 构建所有包 pnpm build:web # 构建前端 pnpm build:backend # 构建后端 # 数据库 pnpm db:generate # 运行数据库迁移 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) ## 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) - [Hono Documentation](https://hono.dev/) - [TUS Protocol](https://tus.io/) [opengraph-image]: https://turborepo-shadcn-tailwind.vercel.app/opengraph-image.png [opengraph-image-url]: https://turborepo-shadcn-tailwind.vercel.app/