package-lock.json 记录每个依赖以及其嵌套依赖的确切版本与下载地址,在 npm install 后自动生成。它存在的意义是可复现:同样的 package.json,在不同时间、不同机器上安装可能得到不同的传递依赖版本,lock 文件把整棵依赖钉死,让所有人装出来的依赖树逐位一致。
正确用法是把 package-lock.json 提交进仓库,CI 里用 npm ci 严格按 lock 文件安装——它比 install 更快也更干净;增删依赖一律走 npm 命令让工具自动同步两个文件。yarn 的对应物是 yarn.lock,pnpm 的对应物是 pnpm-lock.yaml,机制相同而格式各异。
// package-lock.json 关键片段(lockfileVersion 3) { "name": "my-app", "lockfileVersion": 3, "packages": { "": { "dependencies": { "express": "^4.18.2" } }, "node_modules/express": { "version": "4.19.2", "resolved": "https://registry.npmjs.org/express/-/express-4.19.2.tgz", "integrity": "sha512-..." } } } // 团队协作流程:提交 lock 文件,CI 用 npm ci 安装 // npm install 安装并把变更写回 lock // npm ci 严格按 lock 安装,不改文件(推荐 CI 使用)