隐藏的锁文件

中英双语

为了避免重复处理 node_modules 文件夹,从 v7 开始的 npm 使用 node_modules/.package-lock.json 中存在的 "hidden" 锁定文件。这包含有关树的信息,如果满足以下条件,则用于代替读取整个 node_modules 层次结构:

  • 它引用的所有包文件夹都存在于 node_modules 层次结构中。
  • node_modules 层次结构中不存在未在锁定文件中列出的包文件夹。
  • 文件的修改时间至少与它引用的所有包文件夹一样新。

也就是说,隐藏的锁定文件只有在作为最新更新包树的一部分创建时才相关。如果另一个 CLI 以任何方式改变了树,这将被检测到,并且隐藏的锁定文件将被忽略。

请注意,可以手动更改包的内容,使包文件夹的修改时间不受影响。例如,如果您将文件添加到 node_modules/foo/lib/bar.js,那么 node_modules/foo 上的修改时间将不会反映此更改。如果是手动编辑node_modules中的文件,一般最好删除node_modules/.package-lock.json中的文件。

由于较旧的 npm 版本忽略了隐藏的锁定文件,因此它不包含 "normal" 锁定文件中存在的向后兼容性功能。也就是说,它是 lockfileVersion: 3,而不是 lockfileVersion: 2