https://docs.npmjs.com/cli/v10/configuring-npm/package-lock-json
例如,在工作目录下安装了包,会自动生成package-lock.json文件。
package-lock.json 是自动生成的,用于任何涉及 npm 修改 node_modules 目录树或 package.json 的操作。它描述了生成的确切目录树,以便后续安装能够生成相同的目录树,而不受中间依赖项更新的影响。
我当前npm的版本是10.5.0:
执行npm install 进行安装的时候,遵循如下规则:
1)如果package-lock.json指定的版本 在 package.json指定的版本范围内,那么就安装package-lock.json指定的版本。即使有比package-lock.json指定的版本更新的版本,也不会安装。
2)如果package-lock.json指定的版本 不在 package.json指定的版本范围内,那么就安装package.json指定的版本范围内的最新版本。
下面验证规则1:
将工作目录下面的node_modules目录删掉:
为了验证,人为修改package.json和package-lock.json文件中的版本。
package.json的内容,其中^3.6.4
表示可以安装大于等于3.6.4、但小于4.0.0的最新版本:
package-lock.json文件的内容:
3.7.0版本在^3.6.4
指定的范围内,所以预期最终会安装3.7.0版本。
执行npm i命令进行安装:
执行npm list命令,看安装后的版本,是3.7.0,跟预期的一致。
下面验证规则2:
将工作目录下面的node_modules目录删掉。
人为修改package.json和package-lock.json文件中的版本。
package.json的内容,其中^3.7.0
表示可以安装大于等于3.7.0、但小于4.0.0的最新版本(当前最新版本是3.7.1版本):
package-lock.json文件的内容,其中3.6.4不在^3.7.0
指定的范围内:
所以,预期会安装^3.7.0
指定范围内的最新版本,即当前最新的3.7.1版本。
进行安装:
查看安装后的版本,是3.7.1版本,符合预期:
此时,package-lock.json文件的内容会更新: