← 术语图鉴

锁文件

Lockfile · 也叫 package-lock.json / pnpm-lock.yaml / yarn.lock

把这一次安装的每个包的确切版本都记下来,让任何人、任何机器都装出一模一样的一套依赖。

你可能会说:

  • “我本地能构建,为什么部署平台上构建失败?”
  • “package-lock.json 这么长,能删掉吗?”

它是什么

package.json 里常写的是版本范围(比如 ^7.3.5,意思是 7.x 的任意新版本)。锁文件记下的是这一次实际装上的确切版本,包括所有间接依赖。

部署平台构建时通常用 npm ci 这类命令,严格按锁文件安装;锁文件和 package.json 对不上,就直接失败。所以锁文件必须提交进仓库,并且和依赖的改动一起提交。

不同版本的包管理器生成的锁文件,格式和内容可能有差异。本地用新版本生成、线上用旧版本安装,就可能出现"本地好好的,线上构建失败"。

打个比方

像药方上精确到克的剂量:只写"甘草适量",每个药房抓出来都不一样;写清"甘草 6 克、产地某某",才能保证每次抓的药一致。

在这个网站里

这个网站的锁文件,必须用 npm 10 生成(npx npm@10 install):Cloudflare 的构建环境用 npm 10 执行 npm ci,而本地 npm 11 生成的锁文件缺了几个可选依赖的条目,让线上构建直接失败(第 10 课)。

容易搞混的地方

常见误解

锁文件是自动生成的,删了重新装就行

正确理解

删掉重装会按版本范围装上新版本,等于悄悄升级了一批依赖。锁文件要保留、提交,升级要有意为之。

你可以这样告诉 AI

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

检查锁文件:是否已提交、是否和 package.json 一致、是用哪个版本的包管理器生成的,和部署平台构建时用的版本是否一致?不一致的话,用与线上相同的版本重新生成。

先知道

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

接着看

  • 包管理器——负责下载、安装、升级依赖的工具,也负责生成和读取锁文件。
  • 运行环境版本——运行你代码的那个程序(比如 Node.js)的版本。版本不对,有些依赖根本跑不起来。

在这些课里出现