鼻涕虫;如果 package.json 只指定确切的版本,package-lock.json 是多余的吗?
Npm; is package-lock.json redundant if package.json only specifies exact versions?
我与 npm 的 package.json
和 package-lock.json
双重性作斗争。我相信这个问题可能会提供有关这些文件如何相互关联的见解:
如果我们定义了一个package.json
文件,其中只指定了所有依赖项的确切版本,例如:
...
"dependencies": {
"dep1": "1.2.3",
"dep2": "4.5.6"
}
...
并且绝不会出现任何模棱两可的版本,例如:
...
"dependencies": {
"dep1": "^1.2.3",
"dep2": "4.5.*"
}
...
然后 是否还有理由维护一个 package-lock.json
文件? (如果是这样,这是什么原因?)
即使您固定了特定版本的依赖项,package-lock.json
也不是多余的。
package-lock.json
保护您免受传递依赖 - any dependency that is induced by the components that the program references directly.
例如:
- A → B
- 不是B→A
- B→C
那么依赖A→C(根据传递性公理从1和3推导出来)是传递依赖
请注意,B 可以对 C 使用任何非精确版本约束,例如 >= X
。所以这可能是当 C 依赖被解决时,每次它可以是 any 版本大于 X。package-lock.json
将保证不是这种情况。
我与 npm 的 package.json
和 package-lock.json
双重性作斗争。我相信这个问题可能会提供有关这些文件如何相互关联的见解:
如果我们定义了一个package.json
文件,其中只指定了所有依赖项的确切版本,例如:
...
"dependencies": {
"dep1": "1.2.3",
"dep2": "4.5.6"
}
...
并且绝不会出现任何模棱两可的版本,例如:
...
"dependencies": {
"dep1": "^1.2.3",
"dep2": "4.5.*"
}
...
然后 是否还有理由维护一个 package-lock.json
文件? (如果是这样,这是什么原因?)
即使您固定了特定版本的依赖项,package-lock.json
也不是多余的。
package-lock.json
保护您免受传递依赖 - any dependency that is induced by the components that the program references directly.
例如:
- A → B
- 不是B→A
- B→C
那么依赖A→C(根据传递性公理从1和3推导出来)是传递依赖
请注意,B 可以对 C 使用任何非精确版本约束,例如 >= X
。所以这可能是当 C 依赖被解决时,每次它可以是 any 版本大于 X。package-lock.json
将保证不是这种情况。