ChatGPT解决这个技术问题 Extra ChatGPT

npm install 与 update - 有什么区别?

npm installnpm update 之间的实际区别是什么?我什么时候应该使用哪个?


S
Stan Kurdziel

npm installnpm update 处理 package.json 中指定的包版本的区别:

{
  "name":          "my-project",
  "version":       "1.0",                             // install   update
  "dependencies":  {                                  // ------------------
    "already-installed-versionless-module":  "*",     // ignores   "1.0" -> "1.1"
    "already-installed-semver-module":       "^1.4.3" // ignores   "1.4.3" -> "1.5.2"
    "already-installed-versioned-module":    "3.4.1"  // ignores   ignores
    "not-yet-installed-versionless-module":  "*",     // installs  installs
    "not-yet-installed-semver-module":       "^4.2.1" // installs  installs
    "not-yet-installed-versioned-module":    "2.7.8"  // installs  installs
  }
}

总结:唯一的大区别是一个已经安装的带有模糊版本控制的模块......

被 npm install 忽略

由 npm update 更新

另外:默认情况下,installupdate 处理 devDependencies 的方式不同

npm install 将安装/更新 devDependencies 除非添加了 --production 标志

npm update 将忽略 devDependencies 除非添加了 --dev 标志

为什么要使用 npm install

因为除了在 package.json 中处理依赖项之外,npm install 还可以做更多的事情。正如您在 npm install 中看到的,您可以...

手动安装节点模块

使用 npm install -g 将它们设置为全局(将它们放在 shell 的 PATH 中)

安装由 git 标签描述的某些版本

从 git url 安装

使用 --force 强制重新安装


~1.3 呢?
如果版本是 ^5.0.9 怎么办?是否可以让 npm install --save somePackage 将 * 保存到依赖项?
我还要注意,像 postinstall 这样的脚本在安装时运行,但不是在更新时运行。
如果 installupdatepackage.json 中指定的 git URL、git 标签等上的工作方式不同,那么最好将这些情况添加到示例中。
@BoyanKushlev 我认为您的意思是次要和补丁/错误修复,而不是主要和次要。对于所有示例,专业为 1。
D
Dan

npm install 安装 package.json 文件中列出的所有模块及其依赖项。

npm update 更新 node_modules 目录中的所有包及其依赖项。

npm install express 仅安装 express 模块及其依赖项。

npm update express 更新 express 模块(从 npm@2.x 开始,它不会更新其依赖项)。

因此,更新适用于您已经拥有该模块并希望获得新版本的情况。


如果您未在 package.json 文件中指定特定版本,npm install 将获取模块的最新版本。所以这是一种更新。
那么我应该使用什么,npm install 还是 npm update?或者,换句话说,我现在正在使用 npm install,它似乎也在进行更新,我有什么理由应该使用 npm update
因此 update 将始终更新到最新版本,而不管 package.json 是什么,而 install 将尊重 package.json 中给出的版本?
update 安装(或更新到)最新版本的模块。 install 如果未显示模块的最新版本,则安装它,否则保持当前版本。
@Borek npm update 将根据您的 package.json 更新到最新版本,而不是不管它。如果你有 "express": "3.x" 并且你使用的是 3.1.0 版本,它将更新到最新的 3.x 标签。如果有 4.x 版本,则不会安装最新的。
j
jmav

在大多数情况下,这将安装在 npm 上发布的模块的最新版本。

npm install express --save

或更好地将模块升级到最新版本使用:

npm install express@latest --save --force

--save:包将出现在您的依赖项中。

更多信息:npm-install


npm install express@latest --save --force 正是我想要的。
在大多数情况下?还有其他情况吗?
M
MvG

已经提到了许多区别。这里还有一个:

在源目录顶部运行 npm install 将运行各种脚本:prepublishpreinstallinstallpostinstall。根据这些脚本的作用,npm install 可能会比仅安装依赖项做更多的工作。

我刚刚有一个用例,其中 prepublish 将调用 make,而 Makefile 旨在在 package.json 更新时获取依赖项。从 Makefile 调用 npm install 会导致无限递归,而调用 npm update 工作得很好,安装所有依赖项以便即使直接调用 make 也可以继续构建。


例如,如果您更新了 redis 模块,并且 other_module 需要旧版本的 redis,则 npm install other_module 将保证 other_module 将使用旧版本。必要时可添加other_module/node_modules/redis
D
DSK

npm update:使用 package.json 中的最新节点模块安装和更新

npm install:安装 package.json 中定义的节点模块(不更新)


使用 npm 版本 6.9.0 我观察到以下行为:npm update 将省略 package-lock.json 中的大量依赖项。为了使所有必需的包都可用并且 package-lock.json 正确,我总是必须在 npm update 之后立即执行 npm install