跳到正文

锁文件

Lockfile

中级通用

锁文件(Lockfile)是包管理器记录依赖解析结果的文件,通常包含直接和间接依赖的具体版本。它让你和同事在不同机器安装项目依赖时尽量得到相同结果,减少“我这里能跑”的问题。

你可能会说:「我想让 AI 和同事装出的项目依赖尽量一致,别出现换台电脑就跑不起来。」

读之前建议先了解

动手看看

版本范围依赖声明兼容范围锁文件未提供包仓库解析版本安装机器机器 A
1

商品页项目声明卡片库可用兼容的版本。机器 A 首次安装时没有锁文件,包管理器需要去仓库解析具体版本。

要点

  1. 1

    记录这次选中的依赖版本

    你在项目里声明的版本范围,可能允许包管理器选择多个版本。锁文件记下实际选中的版本,也会记录依赖继续引用的其他包。这样下次安装就不必从头选择。

  2. 2

    随依赖变更一起提交

    如果 AI Agent 给网站新增了一个图表包,包管理器可能会更新锁文件。我们通常把这次变更和依赖声明一起提交,让同事及持续集成环境安装同一组依赖。

  3. 3

    一致安装仍有适用范围

    锁文件主要约束包管理器解析和安装的依赖,不会固定操作系统、运行时版本或环境变量。所以两台机器即使使用同一份锁文件,也不能保证构建结果在所有方面完全相同。

容易混淆的地方

依赖声明文件写的是“项目需要哪些包,以及允许哪些版本”;锁文件写的是“这次实际选中了哪些版本”,还涉及间接依赖。它也不是运行时的“锁”:后者用于协调并发访问,和安装依赖无关。

什么时候用

适合用

  • 你和 AI Agent 一起维护网站,新增或升级 npm 包后,想让团队安装相同的依赖版本。
  • 后台项目要在持续集成环境中测试、构建,希望安装结果与仓库记录的依赖一致。
  • 排查一次依赖升级造成的故障,想通过锁文件的变更看哪些间接依赖也更新了。

不适合用

  • 一个只有 HTML、CSS 和图片的静态页面,没有使用包管理器安装依赖,就不需要锁文件。
  • 你想固定生产环境的运行时版本或环境变量,锁文件管不到这些;可以分别用运行时配置和部署配置。
  • 你要防止两个任务同时修改同一条数据库记录,这需要事务等并发控制方式,不是依赖锁文件。

练一练

你让 AI Agent 给网站加了图表功能。它修改了依赖声明文件,也生成了锁文件;本地运行正常。提交代码前,哪种处理更合适?

让 AI 帮你做

请检查这个项目使用的包管理器及其锁文件。新增依赖时同步更新依赖声明和锁文件,不要手改锁文件;完成后说明直接依赖和间接依赖有哪些变化,并运行项目现有的安装与构建检查。

接下来学什么