init
This commit is contained in:
288
docs/PRD.md
Normal file
288
docs/PRD.md
Normal file
@@ -0,0 +1,288 @@
|
||||
# DevPack 产品需求文档 (PRD)
|
||||
|
||||
> 版本:v1.0.0-draft
|
||||
> 更新日期:2026-03-03
|
||||
> 作者:DevPack Team
|
||||
|
||||
---
|
||||
|
||||
## 1. 产品概述
|
||||
|
||||
### 1.1 产品定位
|
||||
|
||||
DevPack 是一款面向开发者的**开发环境打包迁移工具**。它能够将一台电脑上的完整开发环境(运行时、工具链、IDE 配置、Shell 设置等)扫描、捕获并打包成一个可移植的文件,在另一台同操作系统的电脑上快速还原,大幅减少环境搭建时间。
|
||||
|
||||
### 1.2 产品愿景
|
||||
|
||||
> **让开发环境像 U 盘一样即插即用。**
|
||||
|
||||
### 1.3 目标用户
|
||||
|
||||
| 用户画像 | 描述 | 核心诉求 |
|
||||
|---------|------|---------|
|
||||
| 🧑💻 个人开发者 | 拥有多台电脑或定期更换设备 | 快速在新设备上恢复工作环境 |
|
||||
| 👥 团队 Leader | 负责团队开发规范和环境标准化 | 统一团队成员开发环境 |
|
||||
| 🏢 企业 IT 管理员 | 需要批量部署开发工位 | 标准化开发环境快速部署 |
|
||||
| 🎓 培训讲师 | 需要为学员提供一致的学习环境 | 一键分发教学开发环境 |
|
||||
| 🔄 DevOps 工程师 | 管理多个项目的不同环境需求 | 快速切换不同项目环境配置 |
|
||||
|
||||
### 1.4 核心价值主张
|
||||
|
||||
1. **节省时间** — 将环境搭建从数小时/天缩短至分钟级别
|
||||
2. **避免遗漏** — 自动扫描确保不遗漏任何配置
|
||||
3. **可复现** — 确保环境的精确复现
|
||||
4. **安全可靠** — 敏感数据加密,还原可回滚
|
||||
|
||||
---
|
||||
|
||||
## 2. 用户场景 (User Stories)
|
||||
|
||||
### 2.1 核心场景
|
||||
|
||||
#### US-001: 换电脑迁移开发环境
|
||||
> **作为** 一名全栈开发者
|
||||
> **我希望** 在换新电脑时能一键迁移我的所有开发环境
|
||||
> **以便** 我可以在新电脑上立即开始工作,而不用花一整天重新配置
|
||||
|
||||
**验收标准:**
|
||||
- [ ] 能在旧电脑上扫描并打包完整开发环境
|
||||
- [ ] 生成的 `.devpack` 文件可通过 U 盘或网络传输
|
||||
- [ ] 在新电脑上能一键还原所有工具和配置
|
||||
- [ ] 还原后的环境与原始环境功能一致
|
||||
|
||||
#### US-002: 团队环境标准化
|
||||
> **作为** 一名技术团队 Leader
|
||||
> **我希望** 能导出一个标准开发环境包分发给团队成员
|
||||
> **以便** 所有人使用一致的开发工具和配置
|
||||
|
||||
**验收标准:**
|
||||
- [ ] 能创建一个"标准环境"配置文件
|
||||
- [ ] 团队成员可导入并一键应用标准环境
|
||||
- [ ] 可指定哪些配置是强制的,哪些是可选的
|
||||
- [ ] 支持环境包版本更新推送
|
||||
|
||||
#### US-003: 选择性环境打包
|
||||
> **作为** 一名开发者
|
||||
> **我希望** 只打包特定的工具链(如只打包 Go + VS Code)
|
||||
> **以便** 我可以为不同项目准备精简的环境包
|
||||
|
||||
**验收标准:**
|
||||
- [ ] 扫描时能分类展示各类工具/配置
|
||||
- [ ] 用户可选择只打包特定分类
|
||||
- [ ] 支持通过过滤器精确指定打包内容
|
||||
- [ ] 支持保存过滤器为命名配置
|
||||
|
||||
#### US-004: 环境差异对比
|
||||
> **作为** 一名开发者
|
||||
> **我希望** 对比两台电脑的开发环境差异
|
||||
> **以便** 我能定位"为什么在你电脑上能跑在我这里不行"的问题
|
||||
|
||||
**验收标准:**
|
||||
- [ ] 能导入另一台电脑的环境快照
|
||||
- [ ] 以清晰的格式展示两个环境的差异
|
||||
- [ ] 差异按分类(运行时版本、配置差异、缺失工具等)组织
|
||||
- [ ] 可选择性地将差异应用到当前环境
|
||||
|
||||
#### US-005: 环境备份与恢复
|
||||
> **作为** 一名开发者
|
||||
> **我希望** 定期备份我的开发环境配置
|
||||
> **以便** 系统崩溃或重装后能快速恢复
|
||||
|
||||
**验收标准:**
|
||||
- [ ] 支持增量备份(只记录变化部分)
|
||||
- [ ] 支持查看历史版本
|
||||
- [ ] 能从指定版本恢复
|
||||
- [ ] 备份文件占用空间合理
|
||||
|
||||
### 2.2 扩展场景
|
||||
|
||||
#### US-006: 干运行模式
|
||||
> **作为** 一名谨慎的开发者
|
||||
> **我希望** 在还原前能预览将要做的所有更改
|
||||
> **以便** 确认不会破坏我现有的环境
|
||||
|
||||
#### US-007: 还原回滚
|
||||
> **作为** 一名开发者
|
||||
> **我希望** 还原失败或不满意时能撤销所有更改
|
||||
> **以便** 我的电脑不会因为错误的还原变得更糟
|
||||
|
||||
#### US-008: 敏感数据保护
|
||||
> **作为** 一名注重安全的开发者
|
||||
> **我希望** SSH 密钥和 Token 等敏感数据在打包时被加密
|
||||
> **以便** 即使 .devpack 文件泄露也不会暴露我的密钥
|
||||
|
||||
---
|
||||
|
||||
## 3. 功能需求
|
||||
|
||||
### 3.1 功能矩阵
|
||||
|
||||
| 功能模块 | 功能项 | 优先级 | MVP | 说明 |
|
||||
|---------|--------|--------|-----|------|
|
||||
| **环境扫描** | 运行时检测 | P0 | ✅ | Go, Node, Python, Java, Rust, .NET |
|
||||
| | 包管理器检测 | P0 | ✅ | Scoop, Choco, Winget, Brew, APT |
|
||||
| | 编辑器/IDE 配置 | P0 | ✅ | VS Code (扩展+设置), JetBrains |
|
||||
| | Shell 配置 | P0 | ✅ | PowerShell Profile, .bashrc, .zshrc |
|
||||
| | 环境变量 | P0 | ✅ | 用户级环境变量 |
|
||||
| | Git 配置 | P1 | ✅ | .gitconfig, aliases |
|
||||
| | SSH/GPG 密钥 | P1 | ❌ | 加密处理 |
|
||||
| | 字体 | P2 | ❌ | 开发用等宽字体 |
|
||||
| | 自定义脚本 | P2 | ❌ | 用户指定的脚本/工具 |
|
||||
| **打包引擎** | Pack 文件生成 | P0 | ✅ | .devpack 格式 |
|
||||
| | 选择性打包 | P0 | ✅ | 按采集器/过滤器 |
|
||||
| | 增量打包 | P1 | ❌ | 基于上一次快照的差异包 |
|
||||
| | 数据加密 | P1 | ❌ | AES-256-GCM 加密敏感数据 |
|
||||
| | 压缩优化 | P1 | ✅ | 多种压缩算法可选 |
|
||||
| **还原引擎** | 自动安装 | P0 | ✅ | 按依赖顺序安装 |
|
||||
| | 配置还原 | P0 | ✅ | 还原配置文件 |
|
||||
| | 冲突处理 | P0 | ✅ | 检测并处理版本冲突 |
|
||||
| | 干运行模式 | P0 | ✅ | 预览更改不实际执行 |
|
||||
| | 回滚机制 | P1 | ❌ | 还原前创建还原点 |
|
||||
| **环境管理** | Profile 管理 | P0 | ✅ | 创建/编辑/删除配置 |
|
||||
| | 环境对比 | P1 | ❌ | diff 两个环境 |
|
||||
| | 版本历史 | P2 | ❌ | 环境快照版本管理 |
|
||||
| **插件系统** | 内置采集器 | P0 | ✅ | 核心采集器 |
|
||||
| | 自定义插件 | P2 | ❌ | 外部插件加载 |
|
||||
| **注册中心** | 本地存储 | P0 | ✅ | 本地 Pack 管理 |
|
||||
| | 远程注册中心 | P2 | ❌ | 类似 Docker Hub |
|
||||
|
||||
### 3.2 采集器详细需求
|
||||
|
||||
#### 3.2.1 运行时采集器 (Runtime Collector)
|
||||
|
||||
**扫描内容:**
|
||||
| 语言/工具 | 检测项 | 还原方式 |
|
||||
|-----------|--------|---------|
|
||||
| Go | 版本、GOPATH、GOROOT、go env 全部配置 | 下载安装对应版本 |
|
||||
| Node.js | 版本、npm/yarn/pnpm 全局包 | 通过 nvm/fnm 或直接安装 |
|
||||
| Python | 版本、pip 全局包、virtualenv/conda | 安装器或 pyenv |
|
||||
| Java | 版本、JAVA_HOME、Maven/Gradle 配置 | 通过 SDKMAN 或直接安装 |
|
||||
| Rust | 版本、rustup 工具链、cargo 全局安装 | 通过 rustup |
|
||||
| .NET | 版本、SDK 版本列表 | 通过官方安装器 |
|
||||
| Ruby | 版本、gem 全局包 | 通过 rbenv/rvm |
|
||||
| PHP | 版本、Composer 全局包 | 通过安装器 |
|
||||
|
||||
#### 3.2.2 包管理器采集器 (Package Collector)
|
||||
|
||||
| 平台 | 包管理器 | 采集内容 |
|
||||
|------|---------|---------|
|
||||
| Windows | Scoop | bucket 列表、已安装包列表 |
|
||||
| Windows | Chocolatey | 已安装包列表及版本 |
|
||||
| Windows | Winget | 已安装包列表 |
|
||||
| macOS | Homebrew | tap 列表、formulae、casks |
|
||||
| Linux (Debian) | APT | 手动安装的包列表 |
|
||||
| Linux (RHEL) | DNF/YUM | 手动安装的包列表 |
|
||||
| Linux (Arch) | Pacman/Yay | 显式安装的包列表 |
|
||||
|
||||
#### 3.2.3 编辑器采集器 (Editor Collector)
|
||||
|
||||
| 编辑器 | 采集内容 |
|
||||
|--------|---------|
|
||||
| VS Code | 扩展列表、settings.json、keybindings.json、代码片段 |
|
||||
| VS Code Insiders | 同上 |
|
||||
| JetBrains IDEs | 设置仓库导出、插件列表 |
|
||||
| Vim/Neovim | .vimrc / init.vim / init.lua、插件列表 |
|
||||
| Sublime Text | 包列表、配置文件 |
|
||||
| Emacs | .emacs / init.el 配置 |
|
||||
|
||||
#### 3.2.4 Shell 采集器 (Shell Collector)
|
||||
|
||||
| Shell | 采集内容 |
|
||||
|-------|---------|
|
||||
| PowerShell | Profile 脚本、已安装模块 |
|
||||
| Bash | .bashrc, .bash_profile, .bash_aliases |
|
||||
| Zsh | .zshrc, oh-my-zsh 配置/主题/插件 |
|
||||
| Fish | config.fish, 自定义函数 |
|
||||
| Windows Terminal | settings.json |
|
||||
| iTerm2 (macOS) | 配置文件 |
|
||||
|
||||
---
|
||||
|
||||
## 4. 非功能需求
|
||||
|
||||
### 4.1 性能要求
|
||||
|
||||
| 指标 | 要求 | 说明 |
|
||||
|------|------|------|
|
||||
| 扫描速度 | < 30 秒 | 完整环境扫描 |
|
||||
| 打包速度 | < 2 分钟 | 典型开发环境(不含大文件) |
|
||||
| 还原速度 | 取决于网络 | 下载安装器受网速限制 |
|
||||
| Pack 文件大小 | < 50 MB | 典型环境(不含二进制文件) |
|
||||
| 内存占用 | < 200 MB | 运行时峰值 |
|
||||
|
||||
### 4.2 安全要求
|
||||
|
||||
- 敏感数据(SSH 密钥、Token、密码)必须使用 AES-256-GCM 加密
|
||||
- 加密密钥由用户密码通过 Argon2id 派生
|
||||
- Pack 文件支持完整性校验(SHA-256)
|
||||
- 还原前必须校验 Pack 文件签名
|
||||
- 不采集浏览器密码、系统密码等隐私数据
|
||||
|
||||
### 4.3 兼容性要求
|
||||
|
||||
- 同操作系统类型之间迁移(Windows → Windows, macOS → macOS, Linux → Linux)
|
||||
- 不支持跨操作系统迁移(设计决策:不同 OS 的工具链差异太大)
|
||||
- 支持同一 OS 不同版本之间迁移(尽力兼容,不保证 100%)
|
||||
- Pack 文件格式向后兼容(新版本能读取旧版本生成的 Pack)
|
||||
|
||||
### 4.4 可靠性要求
|
||||
|
||||
- 还原过程中断后可恢复(断点续装)
|
||||
- 还原失败自动回滚
|
||||
- 详细的操作日志记录
|
||||
- 错误信息清晰可操作
|
||||
|
||||
---
|
||||
|
||||
## 5. 约束与假设
|
||||
|
||||
### 5.1 技术约束
|
||||
|
||||
- 使用 Go 语言开发,编译为单一静态二进制文件
|
||||
- 不依赖运行时环境(不需要预装 Go、Python 等)
|
||||
- 跨平台编译支持 Windows/macOS/Linux
|
||||
- CLI 优先,暂不开发 GUI
|
||||
|
||||
### 5.2 假设
|
||||
|
||||
- 用户具备基本的命令行使用能力
|
||||
- 目标电脑有网络连接(用于下载安装器)
|
||||
- 用户有对应平台的管理员/sudo 权限
|
||||
- 源电脑和目标电脑使用相同的操作系统类型
|
||||
|
||||
---
|
||||
|
||||
## 6. 成功指标
|
||||
|
||||
| 指标 | 目标 | 衡量方式 |
|
||||
|------|------|---------|
|
||||
| 环境恢复时间 | 缩短 80%+ | 对比手动配置时间 |
|
||||
| 环境完整度 | > 95% 配置项正确恢复 | 还原后验证 |
|
||||
| 用户满意度 | > 4.0/5.0 | 用户调查 |
|
||||
| GitHub Stars | 1000+ (首年) | GitHub |
|
||||
| 活跃用户 | 500+ MAU (首年) | 遥测数据 |
|
||||
|
||||
---
|
||||
|
||||
## 7. 风险评估
|
||||
|
||||
| 风险 | 可能性 | 影响 | 缓解措施 |
|
||||
|------|--------|------|---------|
|
||||
| 不同版本 OS 兼容性问题 | 高 | 中 | 充分测试,兼容性矩阵 |
|
||||
| 安全敏感数据泄露 | 低 | 高 | 强加密,安全审计 |
|
||||
| 包管理器 API 变更 | 中 | 中 | 插件化设计,快速适配 |
|
||||
| 还原过程破坏现有环境 | 中 | 高 | 回滚机制,干运行模式 |
|
||||
| Pack 文件过大 | 中 | 低 | 选择性打包,增量打包 |
|
||||
|
||||
---
|
||||
|
||||
## 附录 A: 术语表
|
||||
|
||||
| 术语 | 定义 |
|
||||
|------|------|
|
||||
| Pack | DevPack 生成的打包文件(.devpack 格式) |
|
||||
| Profile | 命名的环境配置方案,定义打包范围和规则 |
|
||||
| Collector | 采集器,负责扫描和收集特定类别的环境信息 |
|
||||
| Manifest | Pack 内的清单文件,描述 Pack 的完整内容和元数据 |
|
||||
| Restore Point | 还原点,还原前创建的当前环境快照,用于回滚 |
|
||||
| Dry Run | 干运行,模拟执行并展示将要做的更改,不实际操作 |
|
||||
Reference in New Issue
Block a user