npm install vs. update - 有什么区别?

时间:2012-09-18 14:07:55

标签: node.js npm

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

5 个答案:

答案 0 :(得分:573)

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标志,否则
  • --production安装/更新 devDependencies
  • 除非添加npm update标志,否则
  • --dev忽略 devDependencies

为什么要使用npm install

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

  • 手动安装node-modules
  • 使用PATH
  • 将它们设置为 global (将它们置于shell的npm install -g <name>中)
  • 安装git标签描述的某些版本
  • 从git url安装
  • 使用--force
  • 强制重新安装

答案 1 :(得分:73)

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

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

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

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

因此,当您已经拥有该模块并希​​望获得新版本时,可以进行更新。

答案 2 :(得分:44)

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

npm install express --save

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

npm install express@latest --save --force

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

更多信息:npm-install

答案 3 :(得分:8)

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

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

我刚刚有一个用例prepublish会调用makeMakefile用于在package.json更新后获取依赖关系。从npm install内调用Makefile将导致无限递归,而调用npm update工作正常,安装所有依赖项,以便即使make... <subsystem xmlns="urn:jboss:domain:web:1.1" default-virtual-server="default-host" native="false"> ... <connector name="https" protocol="HTTP/1.1" scheme="https" socket-binding="https" enable-lookups="false" secure="true"> <ssl name="localhost" key-alias="localhost" password="server" certificate-file="${jboss.server.config.dir}/server.jks" certificate-key-file="${jboss.server.config.dir}/server.jks" ca-certificate-file="${jboss.server.config.dir}/truststore.jks" protocol="TLSv1" verify-client="true" /> </connector> ... </subsystem> ... ,构建也可以继续直接打电话。

答案 4 :(得分:1)

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

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