11 KiB
11 KiB
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 核心价值主张
- 节省时间 — 将环境搭建从数小时/天缩短至分钟级别
- 避免遗漏 — 自动扫描确保不遗漏任何配置
- 可复现 — 确保环境的精确复现
- 安全可靠 — 敏感数据加密,还原可回滚
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 | 干运行,模拟执行并展示将要做的更改,不实际操作 |