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

Why do I get different version of a dependency in package-lock.json?

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

示例:

为什么 package.json 是 1.12.0 而另一个 json 是 1.13.1 ????

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

简短参考:

  • ^1.12.0 => 最新版本 1.x.x
  • ~1.12.0 => 最新版本 1.12.x
  • 1.12.0 => 恰好 1.12.0

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

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

中指定的版本更高的版本

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