这是对类似问题的答案的后续问题,询问package-lock.json
如果我们仅在中指定精确版本,是否是多余的package.json
。
答案指出,这package-lock.json
可以保护我们免受传递依赖的影响。好的,那么如果语义版本范围语法(例如)^
根本不存在,并且我们都只固定特定版本,则意味着package-lock.json
是多余的,对吗?
好的,我想如果两个依赖项依赖于版本略有不同的相同依赖项,我们需要使用范围语法。但如果我们都使用package-lock.json
now,这是否意味着现在所有范围版本都被视为固定版本?如果我们都只固定特定版本,则意味着package-lock.json
是多余的,对吗?
我是否遗漏了什么?
锁定文件仍包含完整性哈希(以及不太重要的已解析的软件包源 URL),可防止软件包被注册表/软件包主机篡改,因此即使在这种情况下也不会是多余的。除此之外,是的,当仅查看锁定文件功能的版本固定部分时,如果所有版本都已在所有软件包中固定,则锁定文件将是多余的。
当然,现实中依赖版本范围确实存在并且很重要。
package-lock.json
不随软件包发布;它仅适用于最终应用程序。如果每个软件包都发布一个npm-shrinkwrap.json
,那么是的,最终应用程序将不再能够直接从其依赖关系树的版本范围中受益package.json
,但这种分离仍然会起到有用的作用:package.json
声明兼容性意图,并npm-shrinkwrap.json
代表该意图的(经过测试、哈希检查的)快照。(但再说一次,这只是一个假设,在实践中npm-shrinkwrap.json
几乎从未使用过。)