← 术语图鉴

依赖

Dependency · 也叫 第三方包 / npm 包 / 库 / node_modules

项目运行需要、但不是你自己写的代码:框架、工具库,以及它们各自又依赖的一长串包。

你可能会说:

  • “为什么我的项目里有几百个我从没装过的包?”
  • “AI 装了一个新库,会不会有问题?”

它是什么

package.json 里列的是直接依赖,但每个依赖又有自己的依赖,层层展开,最后装进 node_modules 的往往是几百个包。任何一个出问题,都可能让你的项目构建失败。

依赖会更新。新版本可能修了 bug,也可能改了行为、提高了对运行环境的要求。所以装依赖时要固定具体版本,升级时要有意为之,而不是某天自动发生。

AI 很爱加依赖:一个小功能就引入一个库。每多一个依赖,就多一份体积、一份安全风险和一份未来升级的负担。能用几行代码解决的,就别装新库。

打个比方

像做菜用的成品调料:一瓶酱油背后有它自己的原料和工厂。你只买了一瓶,其实同时依赖了一整条供应链。

在这个网站里

这个网站在 package.json 里只写了 11 个直接依赖,但锁文件里记着 781 个包。迁移到 Astro 7 时,就是其中一个间接依赖(undici 8)要求 Node 22.19 以上,让线上构建失败了一次(第 10 课)。

容易搞混的地方

常见误解

我只装了十几个包,项目就只依赖这十几个

正确理解

它们各自还有依赖。真正装进来的,是锁文件里记录的那一整棵树。

你可以这样告诉 AI

复制下面这段,贴给你的 AI

这次改动新增了哪些依赖?每个依赖是做什么的、有没有不装它的替代方案(比如几行代码自己实现)?装了之后锁文件有没有一起更新并提交?

接着看

  • 锁文件——把这一次安装的每个包的确切版本都记下来,让任何人、任何机器都装出一模一样的一套依赖。
  • 包管理器——负责下载、安装、升级依赖的工具,也负责生成和读取锁文件。

在这些课里出现