1. 渐进式拆分(模块化/微前端)的依赖管理如何避免版本冲突与循环依赖?
渐进式拆分(模块化/微前端)中,依赖管理如何避免版本冲突与循环依赖?工程手段有哪些?
- 依赖管理的冲突来源(共享依赖版本漂移、peer 依赖不一致)
- 版本冲突治理(统一版本、peerDependencies、共享运行时)
- 循环依赖的识别与消除(架构约束、lint、动态导入)
版本冲突来源:多包共享同一依赖(React、lodash)时版本漂移导致双实例(React 双实例直接破坏 hooks 与 context);治理手段——统一依赖版本(monorepo 的 resolutions/overrides 强制单版本、依赖图工具检测)、共享依赖外提(把 React 等列为 peerDependencies 并保证宿主提供单实例、微前端用 shared 配置共享运行时如 Module Federation 的 shared: { react: { singleton: true } })、构建期一致性校验(CI 检查关键依赖只存在一个版本)。循环依赖来源:模块间互相引用(A→B→A)、微前端间共享状态互相 import;危害:初始化顺序不确定、tree-shaking 失效、运行时 undefined。消除手段:架构约束(依赖方向单向、领域分层 lint 如 ESLint Boundaries)、重构消除(依赖反转、事件总线/依赖注入、提取公共依赖到共享包)、动态导入打破静态环(运行时按需 require/import,避免加载期互相引用)、循环检测工具(madge、dependency-cruiser 进 CI 阻断)。微前端场景还要注意跨应用直接 import 代码(应用间契约应走 API/共享包,而非源码互相引用)。
本题考察拆分架构的依赖治理。答题核心是"单实例共享运行时防版本冲突、依赖方向约束与提取公共依赖防循环",以及 CI 检测工具与微前端契约边界的工程化。