【发布时间】:2019-05-31 11:18:22
【问题描述】:
假设 package.json 中的所有引用都是 ^1.0.0,我只修改补丁版本。
我有 A 依赖于 B 依赖于 C:A > B > C。我恢复 A 并注意到 CI get 的版本是在 B 之后发布的。我期望 C 的最新版本 在 B 之前发布 会恢复,但实际上我得到了一个在 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 中列出。
【问题讨论】:
标签: npm npm-install npm-publish npm-update npm-version