Npm;如果package.json仅指定确切版本,package-lock.json是否冗余?

Npm;如果package.json仅指定确切版本,package-lock.json是否冗余?,npm,versioning,Npm,Versioning,我与npm的package.json和package lock.json二元性作斗争。我相信这个问题可以提供关于这些文件如何相互关联的见解: 如果我们定义了一个package.json文件,该文件只指定所有依赖项的确切版本,例如: 并且决不使用任何模棱两可的版本,例如: ... "dependencies": { "dep1": "^1.2.3", "dep2": "4.5.*"

我与npm的
package.json
package lock.json
二元性作斗争。我相信这个问题可以提供关于这些文件如何相互关联的见解:

如果我们定义了一个
package.json
文件,该文件只指定所有依赖项的确切版本,例如:

并且决不使用任何模棱两可的版本,例如:

...
  "dependencies": {
    "dep1": "^1.2.3",
    "dep2": "4.5.*"
  }
...

那么是否也有理由维护
包锁.json
文件?(如果是,原因是什么?

即使您锁定了依赖项的特定版本,
包锁.json
也不是多余的

package lock.json
保护您不受可传递依赖关系的影响

例如:

  • A→ B
  • B的情况并非如此→ A
  • B→ C
  • 然后依赖关系是A→ C(根据及物性公理从1和3派生)是一个及物依赖项

    注意,B可以在C上使用任何不精确的版本约束,例如
    =X
    。因此,当C依赖项被解析时,每次它都可以是大于X的任何版本。
    package lock.json
    将保证情况并非如此

    ...
      "dependencies": {
        "dep1": "^1.2.3",
        "dep2": "4.5.*"
      }
    ...