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

Bor*_*ard 481 node.js npm

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

xan*_*iel 619

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
  }
}
Run Code Online (Sandbox Code Playgroud)

总结:唯一的区别是已安装的模块具有模糊版本 ...

  • 被忽略了 npm install
  • 得到更新 npm update

另外:installupdate默认手柄devDependencies不同

  • npm install除非添加了标志,否则将安装/更新 devDependencies--production
  • npm update除非添加了标志,否则将忽略 devDependencies--dev

为什么要使用npm install

因为npm install除了处理依赖关系外,还有更多内容package.json.正如你在npm安装中看到的,你可以......

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

  • 那什么叫~~ 1.3? (18认同)
  • 如果版本是^ 5.0.9怎么办?是否有可能使`npm install --save somePackage`将*保存到依赖项? (6认同)
  • 我还注意到像`postinstall`这样的脚本在安装时运行,但不在更新时运行. (4认同)
  • 如果`install`和`update`在`package.json`中指定的git URL,git标签等有不同的工作方式,那么将这些情况添加到示例中会很棒. (2认同)
  • @Offirmo模糊版本中的波浪号意味着"更新到此包的最新次要(错误修正)版本",次要版本是版本中的最后一个数字,即"1.3.0 - > 1.3.1"这类似于`^ 1.3.0`,`^`更新主要版本,即`1.3.0 - > 1.4.0`. (2认同)
  • @BoyanKushlev我认为您的意思是未成年人和补丁/错误修正,而不是主要和次要。所有示例的专业均为1。 (2认同)
  • `npm update` 以什么方式**忽略** devDependency?我不知道自编写以来是否发生了变化,但是当我在一个根本没有 node_modules 的新文件夹上运行 `npm update` 时,它确实安装了 package.json 的“devDependency”部分中定义的那些,而不需要提供一个 `--dev` 标志。 (2认同)
  • 查看当前的 `npm` 版本(8 和 9),“如果不使用 `--dev`,更新将忽略开发版本”标志不再成立。相反,它具有“--omit”标志。如果未明确设置,npm 将检查“NODE_ENV”环境变量,如果将其设置为“生产”,它将忽略开发依赖项。否则它将更新*所有*依赖项。 (2认同)

sae*_*eed 75

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

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

npm install express只安装express模块​​及其依赖项.

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

因此,更新适用于已有模块并希望获得新版本的更新.

  • `npm install`似乎也做了更新 - 或者不是吗? (19认同)
  • 那么我应该使用什么,`npm install`或`npm update`?或者,换句话说,我现在正在使用`npm install`,它似乎也在进行更新,有什么理由我应该使用`npm update`吗? (11认同)
  • @Borek`npm update`将根据你的package.json更新到最新版本,而不管它是什么.如果您有"快速":"3.x"并且您使用的是3.1.0版本,它将更新为最新的3.x标签.如果有4.x版本,则不会安装最新版本. (11认同)
  • 如果你没有在package.json文件中指定特定版本,npm install将获得最新版本的模块.所以这是一种更新. (5认同)
  • 因此`update`将始终更新到最新版本,而不管package.json,而`install`将尊重package.json中给出的版本? (4认同)

jma*_*mav 46

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

npm install express --save
Run Code Online (Sandbox Code Playgroud)

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

npm install express@latest --save --force
Run Code Online (Sandbox Code Playgroud)

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

更多信息:npm-install

  • `npm install express @ latest --save --force`正是我想要的. (11认同)
  • 绝大多数情况下?还有其他情况吗? (2认同)

小智 10

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

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


MvG*_*MvG 9

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

运行npm install在源代码目录的顶部将运行各种脚本:prepublish,preinstall,install,postinstall.根据这些脚本的作用,a npm install可能比安装依赖项做更多的工作.

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