当前位置: 首页 > news >正文

基于 React + TypeScript + Fabric.js 构建一个封面生成器网站

📘 CoverMaker 开发全流程说明书

目标:基于 React + TypeScript + Fabric.js 构建一个内部使用的封面生成器网站。
开发方式:通过 Claude / VibeCoding 进行全流程代码生成与实现。
部署目标:Docker 自建部署,访问端口 8090。


🧩 一、项目背景与目标

📍 项目简介

CoverMaker 是一个为内部使用而设计的在线封面生成器。
用户可通过网页直接创建、编辑和导出自定义封面图片,无需登录、无需服务器端存储。

🎯 功能目标(MVP)

功能模块功能描述
画布管理默认尺寸 1960×1280(3:4 比例),可缩放预览
文本编辑添加文本、修改字体、字号、颜色、透明度、对齐方式
背景管理选择背景颜色或上传背景图片
导出功能一键导出为 PNG 图片
操作栏左侧工具栏包含字体、颜色、字号、不透明度、导出按钮
样式极简灰白风格

⚙️ 二、技术架构与规范

🧠 技术选型

模块技术栈
前端框架React 18 + TypeScript
构建工具Vite
状态管理Zustand
画布渲染Fabric.js
样式系统Tailwind CSS(快速样式)
图标库Lucide React
部署容器Docker(Node 构建 + Nginx 运行)

📁 目录结构

src/
├── components/
│   ├── CanvasEditor.tsx
│   ├── Toolbar.tsx
│   ├── BackgroundPanel.tsx
│   ├── ExportButton.tsx
│   ├── FontSelector.tsx
│   └── ColorPicker.tsx
├── store/
│   └── useCanvasStore.ts
├── utils/
│   ├── export.ts
│   └── helpers.ts
├── App.tsx
└── main.tsx

🚀 三、VibeCoding 全流程任务阶段

以下每个阶段都附有 Claude 可直接执行的 prompt。
你可以逐条复制到 Claude 中执行,让它自动生成对应的项目代码与文件。


阶段 1:项目初始化

Prompt 1

创建一个名为 "cover-maker" 的 React + TypeScript + Vite 项目。
安装 TailwindCSS 并初始化配置。
在 App.tsx 中创建一个简洁主页,页面中央放置标题 “CoverMaker”,下方留出画布区域占位。
使用浅灰背景和极简风格。

阶段 2:Fabric.js 画布初始化

Prompt 2

在项目中安装并引入 Fabric.js。
创建组件 CanvasEditor.tsx。
在该组件中初始化一个固定尺寸为 1960×1280 的画布。
支持添加一个初始文本 “双击编辑文字”。
用户可拖动、缩放、双击修改文字内容。
确保画布区域响应式居中显示。

阶段 3:样式与状态管理

Prompt 3

安装 Zustand。
创建 store/useCanvasStore.ts 管理画布状态(选中文本、样式参数等)。
创建 Toolbar.tsx,包含以下控件:
- 字体选择(FontSelector.tsx)
- 字号调节滑块
- 颜色选择(ColorPicker.tsx)
- 不透明度滑块
将这些控件与 CanvasEditor 通过 Zustand 状态联动。

阶段 4:背景管理

Prompt 4

创建 BackgroundPanel.tsx 组件。
允许用户选择背景颜色或上传图片。
上传图片后自动缩放填充整个画布(使用 Fabric.Image.fromURL)。
提供“重置背景”按钮。

阶段 5:导出功能

Prompt 5

创建 ExportButton.tsx 组件。
点击时调用 Fabric.js 的 toDataURL 方法,将画布内容导出为 PNG。
文件命名规则:covermaker_{yyyyMMdd_HHmm}.png
触发浏览器自动下载。

阶段 6:UI 布局整合

Prompt 6

使用 Tailwind 创建一个两栏布局:
左侧(320px)为 Toolbar 和 BackgroundPanel。
右侧为 CanvasEditor 居中显示。
整体页面保持极简灰白风格。
字体使用“PingFang SC”或“Inter”,所有按钮为圆角、浅灰边框。

阶段 7:Docker 打包与部署

Prompt 7

创建 Dockerfile:FROM node:20-alpine AS builder
WORKDIR /app
COPY . .
RUN npm install && npm run buildFROM nginx:stable-alpine
COPY --from=builder /app/dist /usr/share/nginx/html
EXPOSE 8090
CMD ["nginx", "-g", "daemon off;"]创建 docker-compose.yml:version: "3.9"
services:covermaker:build: .container_name: covermakerports:- "8090:80"restart: always在本地运行:
docker compose build
docker compose up -d完成后访问:
http://localhost:8090

🧱 四、最终交付内容

执行完上述七个 Prompt 后,你将获得一个完整可运行的网站:

✅ 特性概览

  • 1960×1280 封面画布
  • 拖拽文字 + 实时编辑
  • 字体、颜色、不透明度、背景设置
  • 一键导出 PNG
  • 极简 UI、无登录、轻量运行
  • Docker 打包后即可一键运行

✅ 启动命令

docker compose up -d

访问:
👉 http://localhost:8090


📄 五、后续可选拓展

模块描述
模板功能允许保存几个预设样式
快捷键支持Ctrl+Z、Ctrl+Y 撤销/重做
高分辨率导出导出 2× / 4× 高清版本
多语言支持可加中英切换(i18n)
云端存储若未来要保存作品,可加 Firebase 或自建 API

ChatGPT 出的方案,直接发给 claude 去执行!第一版这个样,还能接受。

在这里插入图片描述

http://www.dtcms.com/a/511408.html

相关文章:

  • 营销型电子商务网站品牌建设与推广思路
  • 更新网站 seo公司的管理方式与管理方法
  • BZV49-C22,115稳压二极管 NXP安世半导体 工业电源芯片 芯片解析
  • 职场发展—如何避雷垃圾公司
  • 【Linux篇】软链接vs硬链接:Linux文件系统中的两种引用机制
  • C++ list核心接口与实战技巧
  • 微服务框架
  • 网站模块结构图wordpress调用栏目名称
  • 算法学习记录03——二叉树学习笔记:从两道题看透后序位置的关键作用​
  • Rust高性能分布式任务调度系统开发实践:从设计到性能优化
  • go tools安装
  • 阿里云代理商:如何给阿里云配置网络ACL?
  • 阿里巴巴 Java 开发手册解读:DO、DTO、BO、AO、VO、Query 的区别与用法
  • 接口测试如何做
  • 记录日常日志
  • 【LeetCode_876_2.02】快慢指针在链表中的简单应用
  • LOOP套LOOP,双LOOP优化,效率提升近30倍
  • iOS 混淆实战 多工具组合完成 IPA 混淆、加固与工程化落地(iOS混淆|IPA加固|无源码混淆|Ipa Guard|Swift Shield)
  • 计算机毕设java中学生心理健康管理系统 中学生心理健康管理的Java平台解决方案 Java技术驱动的中学心理健康管理系统研发
  • 模重复平方计算法
  • 温州网站制作套餐.net网站开发是什么对象开发
  • Tuning——CC调试(适用高通)
  • 【AI智能体开发】什么是LLM?如何在本地搭建属于自己的Ai智能体?
  • Leetcode+Java+图论+并查集
  • 网站代备案流程图越秀网站建设推广
  • 网站 app 公众号先做哪个网站建设实践
  • SpringBoot常用内置工具类使用示例
  • Qt和ffmpeg结合打造gb28181推流/支持udp和tcp被动以及tcp主动三种方式
  • 设计模式-工厂模式:解耦对象创建的设计艺术
  • UVa 1660 Cable TV Network