通过 exports 划定 Legacy API 边界,仅导出必要项并加 LEGACY_ 前缀、禁用默认导出;封装告警与适配逻辑;结合 ESLint 和 CI 实现自动化管控;最终将 exports 改为空对象并标注归档时间。

直接用 exports 控制 Legacy API 变量的废弃与隔离,本质不是靠“删代码”,而是靠“划边界”——把旧变量明确限定在可识别、可监控、不可扩散的作用域内,为后续迁移留出缓冲期和观察窗口。
明确 exports 的作用边界:只暴露迁移必需的最小接口
Legacy API 变量(比如一个全局配置对象、一个旧版工具函数集合)不应再被任意模块 import 或 require。正确做法是在封装层统一导出,并严格限制导出内容:
- 只导出当前业务逻辑真正依赖的字段或方法,不照单全收原始 Legacy 对象
- 对导出项加命名前缀,如
LEGACY_或OLD_,强化语义提示(例:exports.LEGACY_THEME_CONFIG = legacyConfig.theme) - 禁止默认导出(
export default),强制使用具名导出,避免调用方模糊引用
用 exports 封装过渡逻辑:兼容+告警双机制
导出本身可以承载轻量级适配逻辑,让旧变量“带提醒上岗”:
- 在导出值中插入
console.warn(仅开发环境),提示该变量将在下个大版本移除 - 对关键方法做浅层包装,检查入参是否符合新 API 约定,不符合则自动转换或抛出结构化错误
- 导出一个
isLegacyMode布尔值,供上层判断是否处于迁移灰度期,便于渐进式开关功能
配合构建时静态分析:让 exports 成为迁移仪表盘
exports 列表是天然的“废弃清单锚点”。可结合工具链实现自动化治理:
- 用 ESLint 插件扫描所有
import语句,禁止直接引入 Legacy 模块路径,只允许从指定 exports 封装模块导入 - 在 CI 中运行脚本比对
exports内容与历史快照,一旦新增 Legacy 导出项即阻断合并 - 生成导出依赖图谱,标记哪些业务模块仍在消费 Legacy 变量,优先安排这些模块的重构排期
最终收敛:exports 从“过渡桥”变为“拆除日志”
当所有依赖都完成迁移后,不要立刻删除 Legacy 模块。而是将它的 exports 改为仅导出一个空对象或 undefined,并附带注释说明“此模块已归档,最后使用时间:2026-05-12”。这既是清理信号,也为回溯提供依据。

















