在给定的场景中,新的 Dev A 拥有新版本的 npm (8.3)。他克隆了存储库,npm 说 package.lock 文件需要从 lockFile 版本格式 1 升级到版本 2。然后他将其签入。所以现在存储库有一个格式版本 2 的锁定文件,其他开发人员拉取了那下来。
时间流逝,没有任何问题。然后使用版本 6.13 的开发人员 B 安装一个软件包。锁文件从版本2改回版本1正常吗?换句话说,每次使用不同版本的 npm 且采用不同格式的开发人员升级或安装软件包时,根据其 npm 版本及其格式一遍又一遍地更改 lockfileVersion 格式是否正常?或者应该保留lockFileVersion 2?
尝试确定我们的包裹最近发生了什么,我希望将其排除为可能的问题。
据我所知,fileLockVersion 2 应该是向后兼容的。但它应该这样来回变化吗?我不这么认为,因为拥有版本 2 的人(开发人员 A)如何使用版本 1 如果 首先需要升级到版本 2?
那么我是否正确,一旦进入版本 2,就应该保持这种状态?如果是这样,什么会导致它回到版本 1。
谢谢
不,对于开发人员来说,不断地翻转版本并不“正常”,但这种情况的发生是相当“常见”的。我们也遇到过这种情况,特别是package-lock.json
,所以我们告诉每个人都要升级,并且我们确保升级我们所有的构建代理。同样,在 Visual Studio 解决方案中,一些开发人员偶尔会将 VS 的版本从 2017 年到 2019 年来回更改几次,然后我们告诉大家只需升级到 2019 年即可。
经过一些研究,许多团队建议开发人员不要使用
npm i
定义中的软件包,而是使用
package-lock.json文件中的
npm ci
(“clean slate”)。这将确保每个人在其 node_modules 文件夹中使用相同的版本,而不是下载时 NPM 注册表中的最新版本。 为此,您需要将锁定文件提交到代码存储库,并对谁以及何时更新它有非常严格的规则。当然,如果任何开发人员决定使用
npm i
并提交文件,它将不起作用。
官方文档指出“此文件旨在提交到源代码存储库中”,很多人都这样做。它假设每个人都知道他们应该使用
ci
而不是 i
或
install
命令。