npm安装与更新-有什么区别?


Answers:


654

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中所见,您可以...

  • 手动安装节点模块
  • 使用以下命令将它们设置为全局(将它们放入外壳程序中PATHnpm install -g <name>
  • 安装git标签描述的某些版本
  • 从git url安装
  • 强制重新安装 --force

20
那又如何~1.3呢?
Offirmo 2014年

6
如果版本是^ 5.0.9,该怎么办?是否可以npm install --save somePackage将*保存为依赖项?
KwiZ 2015年

5
我还要注意,脚本类似postinstall在安装时运行,但不能在更新时运行。
Michael Marvick

2
如果installupdate在上指定的git URL,git标记等上不同,package.json则最好将这些情况添加到示例中。
joeytwiddle

2
@Offirmo的模糊版本手段波浪“更新到这个包的最新未成年人(bug修正)释放”,次要版本是在版本的最后一个数字,即1.3.0 -> 1.3.1这是类似的^1.3.0,这里的^更新主要版本,即1.3.0 -> 1.4.0
博扬·库什列夫

82

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

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

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

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

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


5
如果您未在package.json文件中指定特定版本,则npm install将获取模块的最新版本。因此,这是一种更新。
2012年

11
所以,我应该用什么,npm install还是npm update?或者,换句话说,我现在正在使用npm install并且似乎也在进行更新,是否有任何理由为什么我应该使用npm update
Borek Bernard 2012年

4
因此update,无论package.json是什么,总是会更新到最新版本,同时install会尊重package.json中给出的版本吗?
Borek Bernard 2012年

1
update安装(或更新)模块的最新版本。install如果未提供模块的最新版本,则安装该模块的最新版本,否则保留当前版本。
tenphi 2014年

11
@Borek npm update会根据您的package.json更新到最新版本,无论如何。如果您具有“ express”:“ 3.x”,并且您使用的是3.1.0版本,它将更新为最新的3.x标记。如果有4.x版本,则不会安装最新版本。
gcochard 2014年

47

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

npm install express --save

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

npm install express@latest --save --force

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

更多信息:npm-install


11
npm install express@latest --save --force正是我想要的
ThomasReggi 2014年

2
在多数情况下?还有其他情况吗?
Dmitri Zaitsev

9

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

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

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


1
一个暗示是,例如,如果您更新了redis模块,并且other_module需要的较旧版本redisnpm install other_module则将保证other_module将使用较旧的版本。other_module/node_modules/redis必要时可以添加。
jlukanta,2016年

4

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

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


使用npm 6.9.0版时,我观察到以下行为:npm update将忽略中的大量依赖项package-lock.json。拥有所有必需的封装,package-lock.json是正确的,我总是要执行npm install之后npm update
曼弗雷德
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.