Một monorepo full-stack cho Photoseller - nền tảng thương mại điện tử bán ảnh được xây dựng với các công nghệ web hiện đại.
Photoseller là một nền tảng thương mại điện tử toàn diện để mua và bán ảnh. Monorepo này chứa toàn bộ ngăn xếp ứng dụng bao gồm API backend, ứng dụng web frontend, và các tiện ích chia sẻ.
-
apps/backend- Máy chủ API NestJS- API RESTful để quản lý ảnh, xác thực và giao dịch
- Cơ sở dữ liệu: MariaDB với Prisma ORM
- Xác thực: Xác thực dựa trên JWT
- Kiểm soát truy cập với ZenStack
-
apps/frontend- Ứng dụng web Next.js- Giao diện người dùng React hiện đại với TypeScript
- Các tính năng thương mại điện tử (danh sách sản phẩm, bộ sưu tập, giỏ hàng)
- Xác thực người dùng (đăng nhập, đăng ký)
- Hỗ trợ đa ngôn ngữ
- Thiết kế responsive
-
packages/ui- Thư viện thành phần React chia sẻ- Các thành phần giao diện tái sử dụng
- Sử dụng bởi ứng dụng frontend
-
packages/eslint-config- Các cài đặt ESLint- Cấu hình cơ bản
- Cấu hình Next.js
- Cấu hình React
-
packages/typescript-config- Các cấu hình TypeScript- Cấu hình cơ bản
- Cấu hình Next.js
- Cấu hình thư viện React
- Node.js phiên bản 18+ hoặc 20+
- pnpm phiên bản 8+ (trình quản lý gói)
- Docker & Docker Compose (cho cơ sở dữ liệu)
- Git phiên bản 2.0+
pnpm installBackend (apps/backend/.env):
DATABASE_URL="mysql://photoseller:photoseller@localhost:3306/photoseller"
JWT_SECRET="your-secret-key"
JWT_EXPIRATION="24h"Frontend (apps/frontend/.env.local):
NEXT_PUBLIC_API_URL="http://localhost:3000"cd apps/backend
docker-compose up -dpnpm -F backend prisma:migrate:deploypnpm -F backend db:seedpnpm devCách này sẽ khởi động:
- Frontend trên
http://localhost:3000 - Backend API trên
http://localhost:8000 - Swagger API Documentation trên
http://localhost:8000/api
photoseller-monorepo/
├── apps/
│ ├── backend/ # API NestJS
│ │ ├── src/
│ │ ├── prisma/ # Lược đồ cơ sở dữ liệu & migration
│ │ └── docker/ # Cấu hình Docker
│ └── frontend/ # Ứng dụng web Next.js
│ ├── app/ # Định tuyến ứng dụng Next.js
│ ├── components/ # Các thành phần React
│ └── lib/ # Tiện ích & trợ giúp
├── packages/
│ ├── ui/ # Các thành phần giao diện chia sẻ
│ ├── eslint-config/ # Các cài đặt ESLint
│ └── typescript-config/ # Các cấu hình TypeScript
├── package.json # Thư mục gốc workspace
├── pnpm-workspace.yaml # Cấu hình workspace pnpm
├── turbo.json # Cấu hình build Turbo
└── README.md # Tệp này
# Khởi động tất cả các ứng dụng ở chế độ phát triển
pnpm dev
# Khởi động ứng dụng cụ thể
pnpm dev -F backend
pnpm dev -F frontend# Xây dựng tất cả các ứng dụng và gói
pnpm build
# Xây dựng ứng dụng cụ thể
pnpm build -F backend
pnpm build -F frontend# Chạy ESLint
pnpm lint
# Định dạng mã với Prettier
pnpm format
# Kiểm tra kiểu dáng mã
pnpm check-format# Tạo Prisma client
pnpm -F backend prisma:generate
# Chạy migration
pnpm -F backend prisma:migrate:deploy
# Seed cơ sở dữ liệu
pnpm -F backend db:seed
# Đặt lại cơ sở dữ liệu
pnpm -F backend db:reset# Hình ảnh backend
docker build -t photoseller-backend apps/backend
# Hình ảnh frontend
docker build -t photoseller-frontend apps/frontendXem apps/backend/docker-compose.yml để cấu hình phát triển cục bộ.
- Runtime: Node.js
- Framework: NestJS
- Cơ sở dữ liệu: MariaDB
- ORM: Prisma
- Kiểm soát truy cập: ZenStack
- Ngôn ngữ: TypeScript
- Framework: Next.js 14+
- Thư viện giao diện: React 18+
- Định kiểu: Tailwind CSS
- Thư viện thành phần: Ant Design
- Ngôn ngữ: TypeScript
- Trình quản lý Workspace: pnpm
- Công cụ xây dựng: Turbo
- Linter: ESLint
- Formatter: Prettier
-
Tạo một nhánh mới cho tính năng của bạn
git checkout -b feature/your-feature-name
-
Thực hiện các thay đổi trong ứng dụng/gói liên quan
-
Kiểm tra các thay đổi của bạn
pnpm test -
Commit các thay đổi của bạn
git add . git commit -m "feat: mô tả các thay đổi"
-
Push lên remote
git push origin feature/your-feature-name
-
Tạo một Pull Request
- Frontend: Thay đổi cổng trong
apps/frontend/next.config.ts - Backend: Đặt biến môi trường
PORT
- Đảm bảo Docker đang chạy:
docker-compose up -d - Kiểm tra thông tin xác thực cơ sở dữ liệu trong
.env - Chạy migration:
pnpm -F backend db:migrate
- Xóa cache:
pnpm store prune - Cài đặt lại:
pnpm install --force
[Thêm giấy phép của bạn ở đây]
Chúng tôi hoan nghênh các đóng góp! Vui lòng tuân theo quy trình phát triển ở trên.
Đối với các sự cố và yêu cầu tính năng, vui lòng tạo một issue trên GitHub.
npx turbo dev --filter=web
pnpm exec turbo dev --filter=web
pnpm exec turbo dev --filter=webTip
Vercel Remote Cache is free for all plans. Get started today at vercel.com.
Turborepo can use a technique known as Remote Caching to share cache artifacts across machines, enabling you to share build caches with your team and CI/CD pipelines.
By default, Turborepo will cache locally. To enable Remote Caching you will need an account with Vercel. If you don't have an account you can create one, then enter the following commands:
With global turbo installed (recommended):
cd my-turborepo
turbo loginWithout global turbo, use your package manager:
cd my-turborepo
npx turbo login
pnpm exec turbo login
pnpm exec turbo loginThis will authenticate the Turborepo CLI with your Vercel account.
Next, you can link your Turborepo to your Remote Cache by running the following command from the root of your Turborepo:
With global turbo installed:
turbo linkWithout global turbo:
npx turbo link
pnpm exec turbo link
pnpm exec turbo linkLearn more about the power of Turborepo: