返回知识库

工程与栈 · 开发基础

依赖Dependency

依赖分直接和传递:你声明一个包,它还会拉来一棵树;用途、体积、漏洞和锁文件都要一起看。

先认出这排货架箱,再看谁拖来了谁

下面就是店里的依赖货架:默认 express 已经拖来三只传递箱。漏洞和锁定都写在同一只箱子上。

周末市集店 · package.json直接 1 · 传递 3

express 4.21.2

你只声明了这一个直接依赖。

  • body-parser · 传递
  • qs · 传递
  • raw-body · 传递

直接 1 · 传递 3树长在货架上,不是页脚。

原因:直接依赖写在清单里,传递依赖被它自动拉来。下一步:点「留下漏洞包」,看哪只箱子会标风险。

知识点:直接依赖会拖来传递树

货架上的箱子已经演示了关系,这里只命名四条。

  • 直接依赖:你写进 package.json 的包,用途必须说得清。
  • 传递依赖:它再去拉的包,体积、许可证和漏洞都算你的。
  • 锁文件:把整棵树的精确版本钉死,别人装到同一棵。
  • 离开后要盯:能自己写十行就别引重库;看见新包先问传递树。

什么时候用、怎么用

每次加包都当一次进货;不是「能跑就行」。

  • 信号:树突然变大、审计冒漏洞、两个人装出不同版本。
  • 适用:新增、升级、排查「我没装过这个包怎么在 node_modules」。
  • 不适用:项目自己写的模块,那不是外部依赖。
  • 最短路径:写明用途 → 看传递树 → 提交 lockfile → 审计风险。

正反例:同一只 express 箱子

目标都是装 Web 服务,只改要不要锁定和审计。

正例看清传递树,再用锁文件钉死

货架稳定。版本写在箱子上。

反例只加 express,不管传递漏洞

raw-body 那只箱子标风险。失败写在物件上。

快速自测

package.json 只写了 express,node_modules 里为什么还有 qs?

继续查证

术语的技术定义和行为以这些一手或权威资料为准。

下一步学

和本知识点经常一起出现的概念。