是谁改了package.lock.json?

283 阅读2分钟

日常小剧场

在一个风平浪静的发版日中午,工位上的每一位同事,都在紧张并有序的提交自己的代码合并自己的代码。突然版本管理员发出了,无奈又气愤的疑问,是谁改了package.lock.json的代码呢?导致造成了大块大块的冲突。还需要版本管理员手动去解决。

那么到底是谁改了呢?

首先我们都知道,package.lock.json是为了应对各种包相互依赖地狱,以及用于固定包版本由npm 推出的工具。里面存在所有的依赖(包括依赖的依赖等等)。由于项目日渐巨大化。版本更替日益明显,不同的版本可能会影响线上的稳定性,所以维护package.lock.json是非常有必要的。

ps:依赖地狱

打开node_modules,一般可以发现总是会出现如下情况。

image.png

项目中有webpack和webpack-soureces包,webpack下面还有node_modules,甚至里面还依赖了webpack-soureces包,那么webpack-soureces不就依赖了多次了吗,随着项目越来越大这种情况会越来越多。 这就产生了依赖地狱。

ps:锁定版本

正常情况下如果没有package.lock.json文件,运行npm install 会根据版本去标识去下载最新的版本。但是一些老旧的项目是不适应一些过于新的包的,如果版本不去锁定很可能会导致出现线上问题。

明白了package.lock.json的作用,我们讨论一下,package.lock.json是怎么会被修改了呢?这和npm install 的运行机制有关,当我们运行npm install 时会根据有无lock 文件作出操作,如果没有lock 会根据package 构建,如果有lock 按照下图(其他文章中参考而来)根据版本去操作。而当我们install时候如果package.json 文件与之前文件不一样就可能修改lock文件。

image.png

综上所述终于找到了原因,最后找到那位粗心的同学一问,就是因为package.json 改动之后 在install,产生了冲突 该同学没有去解决,而是直接删了又install 之后又推了上去,就导致了这种情况。

解决方法

那么我们平时开发时候要怎样去避免呢?

推荐用 npm ci,可以依照lock文件去构建。

参考文献

pnpm 是凭什么对 npm 和 yarn 降维打击的

package.json 与 package-lock.json 的关系

字节的一个小问题 npm 和 yarn不一样吗?