NPM何时可以恢复在依赖包之后发布的依赖关系?

时间:2019-01-04 21:43:09

标签: npm npm-install npm-publish npm-update npm-version

假设package.json中的所有引用均为^ 1.0.0,而我仅修改了补丁版本。

我有一个依赖于B的C,它依赖于C:A> B>C。我还原A并注意到CI get的版本在B之后发布。我期望在B之前发布的最新版本C 将被恢复,但实际上我在B之后发布了C版本。

然后,我发布了C的虚空补丁,并尝试升级A以期希望看到C的新版本。用A还原的C版本与发布新版本的C之前的版本相同。

那么,NPM在恢复格式为^ 1.0.0的依赖项时是否考虑发布软件包的时间?


  

从npm@2.6.1开始,npm更新将仅检查顶级软件包。以前版本的npm也将递归检查所有依赖项。要获得旧的行为,请使用npm --depth 9999更新。

我正在运行6.4.1,因此默认情况下我没有得到递归行为。使用depth标志,我看到C已更新为新版本。

但是,这仍然不能解释为什么B以后首先同步发布的C版本?首次同步时,即使不传递深度标记,NPM也必须递归所有依赖项。在初始同步过程中,它将应用什么政策?

现在,如果我删除node_modules文件夹并运行npm install,我将始终获得新版本的C。这似乎是npm记得我以前用depth标志运行过npm update,但是我发现没有在A的packages.json中列出我在packages.json中作为C所做的记录。

1 个答案:

答案 0 :(得分:0)

如果我假设npm的设计者试图减少npm.org的网络流量,那么它的行为就更有意义了。

npm install> v2.6.1将尽可能使用缓存来满足间接依赖关系,即使已将更新的令人满意的版本发布到npm.org上也是如此; npm install检查是否有更高版本的缓存软件包。

有两种方法可以强制npm检查服务器的最新软件包版本:(1)使用--depth 9999或(2)使用npm cache clear --froce删除缓存。

我认为npm publish应该在本地缓存新软件包...