599

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

4

5 回答 5

737

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

{
  "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

因为npm install除了在package.json. 正如您在npm install中看到的,您可以...

  • 手动安装节点模块
  • 使用_ _ PATH_npm install -g <name>
  • 安装由 git 标签描述的某些版本
  • 从 git url 安装
  • 强制重新安装--force
于 2013-11-06T22:26:10.017 回答
100

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

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

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

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

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

于 2012-09-18T15:15:37.767 回答
48

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

npm install express --save

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

npm install express@latest --save --force

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

更多信息:npm-install

于 2014-01-15T22:46:54.647 回答
12

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

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

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

于 2015-09-09T16:33:24.627 回答
12

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

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

于 2019-03-07T07:25:51.287 回答