# Photography Frontend Makefile # 使用 bun 作为包管理器的前端项目构建脚本 .PHONY: help install dev build start lint clean test type-check preview # 默认目标 .DEFAULT_GOAL := help # 项目配置 PROJECT_NAME = photography-frontend PORT = 3000 BUILD_DIR = .next # 帮助信息 help: ## 显示帮助信息 @echo "$(PROJECT_NAME) - 摄影作品集前端项目" @echo "" @echo "可用命令:" @grep -E '^[a-zA-Z_-]+:.*?## .*$$' $(MAKEFILE_LIST) | sort | awk 'BEGIN {FS = ":.*?## "}; {printf " \033[36m%-15s\033[0m %s\n", $$1, $$2}' # 安装依赖 install: ## 安装项目依赖 @echo "📦 安装依赖..." bun install # 开发服务器 dev: ## 启动开发服务器 @echo "🚀 启动开发服务器..." bun run dev # 构建项目 build: ## 构建生产版本 @echo "🔨 构建生产版本..." bun run build # 启动生产服务器 start: build ## 启动生产服务器 @echo "🌐 启动生产服务器..." bun run start # 代码检查 lint: ## 运行代码检查 @echo "🔍 运行代码检查..." bun run lint # 类型检查 type-check: ## 运行TypeScript类型检查 @echo "📋 运行类型检查..." bunx tsc --noEmit # 清理构建文件 clean: ## 清理构建文件和缓存 @echo "🧹 清理构建文件..." rm -rf $(BUILD_DIR) rm -rf node_modules rm -f bun.lockb # 重新安装 reinstall: clean install ## 清理并重新安装依赖 @echo "♻️ 重新安装完成" # 预览构建结果 preview: build ## 预览构建结果 @echo "👀 预览构建结果..." cd $(BUILD_DIR) && bunx serve # 更新依赖 update: ## 更新所有依赖 @echo "⬆️ 更新依赖..." bun update # 添加依赖 add: ## 添加新依赖 (使用: make add PACKAGE=package-name) @if [ -z "$(PACKAGE)" ]; then \ echo "❌ 请指定包名: make add PACKAGE=package-name"; \ exit 1; \ fi @echo "➕ 添加依赖: $(PACKAGE)" bun add $(PACKAGE) # 添加开发依赖 add-dev: ## 添加开发依赖 (使用: make add-dev PACKAGE=package-name) @if [ -z "$(PACKAGE)" ]; then \ echo "❌ 请指定包名: make add-dev PACKAGE=package-name"; \ exit 1; \ fi @echo "➕ 添加开发依赖: $(PACKAGE)" bun add -D $(PACKAGE) # 移除依赖 remove: ## 移除依赖 (使用: make remove PACKAGE=package-name) @if [ -z "$(PACKAGE)" ]; then \ echo "❌ 请指定包名: make remove PACKAGE=package-name"; \ exit 1; \ fi @echo "➖ 移除依赖: $(PACKAGE)" bun remove $(PACKAGE) # 格式化代码 format: ## 格式化代码 @echo "✨ 格式化代码..." bunx prettier --write . # 检查项目状态 status: ## 检查项目状态 @echo "📊 项目状态:" @echo " Node版本: $(shell node --version)" @echo " Bun版本: $(shell bun --version)" @echo " 项目目录: $(PWD)" @echo " 构建目录: $(BUILD_DIR)" @if [ -f "bun.lockb" ]; then echo " 锁文件: ✅ bun.lockb"; else echo " 锁文件: ❌ 未找到"; fi # 开发环境设置 setup: install ## 设置开发环境 @echo "🛠️ 设置开发环境..." @if [ ! -f ".env.local" ]; then \ echo "📝 创建环境变量文件..."; \ cp .env.local.example .env.local 2>/dev/null || echo "NEXT_PUBLIC_API_URL=http://localhost:3001/api" > .env.local; \ fi @echo "✅ 开发环境设置完成" # 生产部署准备 deploy-prep: ## 准备生产部署 @echo "🚀 准备生产部署..." make clean make install make type-check make lint make build @echo "✅ 部署准备完成" # 快速启动 quick: ## 快速启动 (安装依赖并启动开发服务器) @echo "⚡ 快速启动..." make install make dev # Docker 相关命令 docker-build: ## 构建Docker镜像 @echo "🐳 构建Docker镜像..." docker build -t photography-frontend:latest . docker-run: ## 运行Docker容器 @echo "🚀 运行Docker容器..." docker run -d -p 3000:80 --name photography-frontend photography-frontend:latest docker-stop: ## 停止Docker容器 @echo "⏹️ 停止Docker容器..." docker stop photography-frontend || true docker rm photography-frontend || true docker-logs: ## 查看Docker日志 @echo "📋 查看Docker日志..." docker logs -f photography-frontend docker-dev: ## 启动Docker开发环境 @echo "🛠️ 启动Docker开发环境..." docker-compose up -d docker-dev-logs: ## 查看Docker开发环境日志 @echo "📋 查看Docker开发环境日志..." docker-compose logs -f docker-dev-stop: ## 停止Docker开发环境 @echo "⏹️ 停止Docker开发环境..." docker-compose down docker-clean: ## 清理Docker资源 @echo "🧹 清理Docker资源..." docker system prune -f # 生产环境Docker命令 docker-prod-build: ## 构建生产Docker镜像 @echo "🏭 构建生产Docker镜像..." docker build -t photography-frontend:prod --target production . docker-prod-deploy: ## 部署生产环境 @echo "🚀 部署生产环境..." docker-compose -f docker-compose.yml --profile proxy up -d docker-prod-logs: ## 查看生产环境日志 @echo "📋 查看生产环境日志..." docker-compose -f docker-compose.yml logs -f docker-prod-stop: ## 停止生产环境 @echo "⏹️ 停止生产环境..." docker-compose -f docker-compose.yml down