【发布时间】:2012-09-10 19:34:31
【问题描述】:
npm install 和npm update 之间的实际区别是什么?我什么时候应该使用哪个?
【问题讨论】:
npm install 和npm update 之间的实际区别是什么?我什么时候应该使用哪个?
【问题讨论】:
npm update: 使用 package.json 中最新的节点模块进行安装和更新
npm install: 安装 package.json 中定义的节点模块(不更新)
【讨论】:
npm update 将省略 package-lock.json 中的大量依赖项。为了使所有必需的包都可用并且package-lock.json 正确,我总是必须在npm update 之后立即执行npm install。
npm install 安装package.json 文件中列出的所有模块及其依赖项。
npm update 更新node_modules 目录中的所有包及其依赖项。
npm install express 仅安装 express 模块及其依赖项。
npm update express 更新 express 模块(从 npm@2.x 开始,它不会更新其依赖项)。
因此,更新适用于您已经拥有该模块并希望获得新版本的情况。
【讨论】:
npm install 或 npm update?或者,换句话说,我现在正在使用npm install,它似乎也在进行更新,有什么理由我应该使用npm update?
update 将始终更新到最新版本,而不管package.json,而install 将尊重package.json 中给出的版本?
update 安装(或更新到)最新版本的模块。 install 安装最新版本的模块,如果它没有出现,否则保持当前版本。
npm update 将根据您的 package.json 更新到最新版本,而不是不管它。如果您有 "express": "3.x" 并且您使用的是 3.1.0 版本,它将更新为最新的 3.x 标签。如果有4.x版本,不会安装最新的。
npm install和npm 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 更新
另外:install 和 update 默认处理 devDependencies 的方式不同
npm install 将安装/更新 devDependencies,除非添加--production 标志npm update 将忽略 devDependencies 除非添加--dev 标志为什么要使用npm install?
因为npm install 除了处理package.json 中的依赖项外,还可以做更多事情。
正如您在npm install 中看到的,您可以...
npm install -g <name>将它们设置为全局(将它们放入shell的PATH)
--force 强制重新安装
【讨论】:
~1.3 呢?
npm install --save somePackage 将 * 保存到依赖项?
postinstall 这样的脚本在安装时运行,但在更新时不运行。
install 和 update 在 package.json 中指定的 git URL、git 标签等上的工作方式不同,那么最好将这些情况添加到示例中。
已经提到了许多区别。这里还有一个:
在源目录顶部运行 npm install 将运行各种脚本:prepublish、preinstall、install、postinstall。根据这些脚本的作用,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。
在大多数情况下,这将安装在 npm 上发布的模块的最新版本。
npm install express --save
或更好地将模块升级到最新版本使用:
npm install express@latest --save --force
--save: 包会出现在你的依赖中。
更多信息:npm-install
【讨论】:
npm install express@latest --save --force 正是我想要的。