# Requirement Specification / 需求规格说明

# js-upgrade

## Background / 背景

JavaScript 项目的依赖管理是开发者日常工作的重要组成部分。随着时间推移，项目依赖会变得过时，可能包含安全漏洞或缺少新功能。手动逐个升级依赖既繁琐又容易出错。需要一个命令行工具来批量升级项目依赖到最新版本，同时支持灵活的升级选项。

## Goals / 目标

- [x] 实现 JavaScript 项目依赖的批量升级功能
- [x] 支持多种包管理器 (npm, yarn, pnpm, rush)
- [x] 支持 `--prod-only` 选项只升级生产依赖
- [x] 支持 `--dev-only` 选项只升级开发依赖
- [x] 自动检测包管理器类型
- [x] 智能跳过 monorepo workspace 依赖

## Scope / 范围

### In Scope / 范围内

- 读取 package.json 获取依赖列表
- 自动检测包管理器 (npm/yarn/pnpm/rush)
- 批量升级依赖到 @latest 版本
- 分别处理 dependencies 和 devDependencies
- 支持 pnpm workspace root (-w 参数)
- 网络错误自动重试 (最多 3 次)
- 错误分类和友好提示

### Out of Scope / 范围外

- 指定特定版本升级
- 交互式选择依赖升级
- 版本锁定和回滚功能
- peer dependencies 自动解决

## Constraints / 约束条件

- 依赖外部包管理器 (npm/yarn/pnpm/rush)
- 需要在包含 package.json 的目录下运行
- 网络连接要求 (需要访问 npm registry)
- 升级超时限制 (5 分钟)

## Acceptance Criteria / 验收标准

- [x] `l js upgrade` 升级所有依赖
- [x] `l js upgrade --prod-only` 只升级 dependencies
- [x] `l js upgrade --dev-only` 只升级 devDependencies
- [x] 自动跳过 `workspace:*` 类型的依赖
- [x] 网络错误时自动重试
- [x] 显示升级计划、进度和结果统计
- [x] 失败时显示手动执行命令

## Implementation / 实现

- **文件**: `src/commands/js/upgrade.rs`
- **命令**: `l js upgrade [--prod-only] [--dev-only]`
- **状态**: ✅ 已完成

## Open Questions / 待澄清问题

- (无)
