为什么我在 package-lock.json 中得到不同版本的依赖项?

Sus*_*shi 3 npm package.json angular

我正在开发一个angular 10应用程序。为什么我看到的依赖项版本与我在+ cmdpackage-lock.json中放入的版本不同:package.jsonnpm install

例子 :

  • 包.json

    “依赖项”:{“下划线”:“ ^1.12.0 ”,.... }

  • 然后我吃午饭npm install

  • 包锁

    “下划线”:{“版本”:“ 1.13.1 ”,“已解决”:“https://registry.npmjs.org/underscore/-/underscore-1.13.1.tgz”,“完整性”:“sha512- ..." },

为什么在 package.json 中它是版本 1.12.0 而在另一个 json 中它是 1.13.1 ???

dom*_*m00 6

您可以查看完整的semver文档以获取更多详细信息,但是当您编写 时^1.12.0,您实际上是在编写版本范围,而不是单个版本。

简短参考:

  • ^1.12.0=> 最新版本是1.x.x
  • ~1.12.0=> 最新版本是1.12.x
  • 1.12.0=> 完全正确1.12.0

根据 semverMAJOR.MINOR.PATCH约定,具有相同MAJOR编号的任何版本都不包含重大更改,因此您通常会看到使用范围指定的包版本^;您可以获得最新的更新并且您的代码不会损坏!

然而,与 不同的是package.jsonpackage-lock.json它始终包含安装的软件包的确切版本,以......好吧......锁定它们。这就是为什么您package-lock.json可以显示比您在 中指定的版本更高的版本package.json

当然,如果出于某种原因这不行并且您需要坚持使用更具体的版本,则可以使用其他选择器之一。