# 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 | 干运行,模拟执行并展示将要做的更改,不实际操作 |