npm-update 和 npm-install 可以给出不同的结果吗?

Posted

技术标签:

【中文标题】npm-update 和 npm-install 可以给出不同的结果吗?【英文标题】:Can npm-update and npm-install give different result? 【发布时间】:2018-09-11 20:18:23 【问题描述】:

假设我们有 3 个具有以下依赖项的包:

C -> B@^1.0.0 和 B -> A@^1.0.0

(模块 C 依赖于模块 B 版本 1.0.0 及更高版本;模块 B 依赖于模块 A 版本 1.0.0 及以上;)

现在我正在执行以下步骤:

    模块 C 中的 npm-install(结果:node_modules 包含 A@^1.0.0 和 B@^1.0.0) 模块A高版本的npm-publish:A@^1.0.1 模块 C 中的 npm-update(结果:node_modules 包含 A@^1.0.0 和 B@^1.0.0)--- 模块未更改!

但是,如果我要清理 node_modules 然后再次 npm-install 模块 C,我会得到 node_modules 包含 A@^1.0.1 和 B@^1.0.0

有什么方法可以在不删除并重新安装的情况下获得完整更新的 node_modules? 如果不是,我管理依赖项的方式有什么问题?我不想显式添加所有依赖树,所以 node-update 将起作用

【问题讨论】:

【参考方案1】:

npm update 尊重语义版本控制,如果您有 ^ 依赖项,它不会更新软件包的主要版本。

^ 在依赖项上的字面意思是只能更新到次要版本 - 因为主要版本包含重大更改。

此命令会将列出的所有包更新到最新版本(由标签配置指定),尊重 semver。

来自the docs

【讨论】:

我们相应地解决了这个问题。这里的重点是我们的子依赖没有在根应用程序中更新(直接依赖是)

以上是关于npm-update 和 npm-install 可以给出不同的结果吗?的主要内容,如果未能解决你的问题,请参考以下文章

npm-install once

npm 模块安装机制简介

未为任务启用 Gradle 构建缓存

npm install时不改变package-lock.json的做法

& 和 && 区别和联系,| 和 || 区别和联系

第三十一节:扫盲并发和并行同步和异步进程和线程阻塞和非阻塞响应和吞吐等