Skip to content
返回维护与 LTS

弃用策略

定义如何、何时、为何弃用 — 使退役对用户可预测的规则。

为什么

无成文策略则弃用是临时的:某功能因某人感觉在 minor 中被删,客户端坏。策略使弃用成契约:弃用功能得最小支持窗口(如 6 个月)、编程信号(Deprecation 头/日志警告)、文档化替代、提前沟通的 sunset 日期。这使客户端能规划迁移而非被伏击,且你队能无疚删代码因遵循了策略。策略还防相反失败 — 因无人愿做删者而永留死功能 — 使删除成排程策略驱动事件而非个人决定。

何时使用

首次弃用前写一次策略。应用于每个计划退役的功能/API。

如何做

1. 定支持窗口:弃用到删除最少 6 个月(主要 API 12 个月)
2. 定信号:Deprecation HTTP 头、SDK console.warn、@deprecated JSDoc、changelog 条目
3. 定文档:每次弃用须命名替代并链迁移指南
4. 定沟通:changelog + 邮件注册用户 + 弃用仪表盘
5. 定删除标准:仅 (a) sunset 日期过 且 (b) 用量 <1% 持续 30 天后删
6. 把策略写入 DEPRECATION.md 并从 README 链接
7. 仪表盘跟踪弃用:功能、弃用日期、sunset 日期、当前用量 %

示例

# DEPRECATION.md(放仓库根)
## 策略
- 支持窗口:6 个月(次要 API)、12 个月(主要 API)
- 信号:Deprecation 头 + console.warn + @deprecated JSDoc
- 删除标准:sunset 日期过 且 用量 <1% 持续 30 天

# 弃用仪表盘(每发布跟踪)
| 功能          | 弃用日期   | Sunset     | 用量  | 状态     |
|---------------|-----------|------------|-------|----------|
| /v1/orders    | 2024-06-01| 2024-12-31 | 0.3%  | 可删     |
| legacyAuth()  | 2024-08-15| 2025-02-15 | 5.2%  | 观察     |
| oldExportFmt  | 2024-09-01| 2025-03-01 | 12%   | 通知     |

# 代码信号
/** @deprecated 用 newAuth() 替代 — 2025-02-15 删除 */
export function legacyAuth() {
  console.warn('[deprecated] legacyAuth() 将于 2025-02-15 删除。用 newAuth()。');
  return newAuth();
}

常见问题

  • ⚠无支持窗口 — 功能同发布弃用并删,客户端无迁移时间坏。
  • ⚠弃用不命名替代 — 客户端被告停用 X 却不知用什么。
  • ⚠仅按 sunset 日期删而用量仍 20% — 你坏没见通知的真实用户。

最佳实践

  • ✓删除前须 sunset 日期过 且 用量 <1% 持续 30 天 — 仅日期坏滞后客户端。
  • ✓每次弃用须命名替代并链迁移指南 — "别用 X" 无 "用 Y" 无用。
  • ✓跟踪弃用仪表盘含每功能用量 % — 可见防过早删并识别遗忘迁移。