假设 package.json 中的所有引用都是 ^1.0.0 并且我只修改补丁版本。
我有 A 依赖于 B 依赖于 C:A > B > C。我恢复 A 并注意到 CI get 的版本是在 B 之后发布的。我预计在 B 之前发布的 C 的最新版本会被恢复,但我实际上在 B 之后发布了 C 的版本。
然后我发布了一个 C 的空补丁并尝试升级 A 期望看到新版本的 C。但是没有任何改变;用 A 恢复的 C 版本与我发布新版本 C 之前得到的版本相同。
那么,在恢复 ^1.0.0 形式的依赖项时,NPM 是否会考虑何时发布包?
从 npm@2.6.1 开始,npm 更新将只检查顶级包。以前版本的 npm 也会递归地检查所有依赖项。要获得旧行为,请使用 npm --depth 9999 update。
我正在运行 6.4.1,所以默认情况下我没有得到递归行为。使用深度标志,我看到 C 已更新到新版本。
但是,这仍然不能解释为什么首先同步 B 之后发布的 C 版本;当我第一次同步时,即使我没有传递深度标志,NPM 也必须递归所有依赖项。在初始同步期间,它应用了什么策略?
现在,如果我删除node_modules
文件夹并运行,npm install
我始终会获得新版本的 C。就好像 npm 记得我之前使用深度标志运行 npm update 但是我在 packages.json 中没有发现我这样做的记录,因为 C 是未在 A 的 packages.json 中列出。