# 幽灵依赖是什么?

为什么会发生幽灵依赖?

# 1. npm/Yarn 的扁平化 node_modules 结构

  • npm v3+ 和 Yarn 会将依赖的依赖(子依赖)平铺在项目根目录的 node_modules 中。
  • 例如:项目安装 A,而 A 依赖 B,最终目录结构如下:
node_modules/
├── A/      # 直接依赖
└── B/      # 子依赖(本不应被项目直接访问)
1
2
3
  • 此时,如果代码中直接 require('B'),虽然能运行(因为 Bnode_modules 根目录),但 B 并未在 package.json 中声明,这就是幽灵依赖。

# 2. Monorepo 中的依赖提升

  • 在 Monorepo(如 Lerna、Yarn Workspaces)中,子包的依赖可能会被提升到根目录的 node_modules,导致子包直接引用未声明的依赖。
Last Updated: 6/7/2025, 12:11:58 PM