Files
DevPack/docs/PRD.md
2026-03-03 18:20:18 +08:00

289 lines
11 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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 | 干运行,模拟执行并展示将要做的更改,不实际操作 |