ChatGPT解决这个技术问题 Extra ChatGPT

npm install vs. update - what's the difference?

What is the practical difference between npm install and npm update? When should I use which?


S
Stan Kurdziel

The difference between npm install and npm update handling of package versions specified in 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
  }
}

Summary: The only big difference is that an already installed module with fuzzy versioning ...

gets ignored by npm install

gets updated by npm update

Additionally: install and update by default handle devDependencies differently

npm install will install/update devDependencies unless --production flag is added

npm update will ignore devDependencies unless --dev flag is added

Why use npm install at all?

Because npm install does more when you look besides handling your dependencies in package.json. As you can see in npm install you can ...

manually install node-modules

set them as global (which puts them in the shell's PATH) using npm install -g

install certain versions described by git tags

install from a git url

force a reinstall with --force


and what about ~1.3 ?
what if the version is like ^5.0.9? And is it possible to make npm install --save somePackage save the * to dependencies?
I'd also note that scripts like postinstall run on install, but not on update.
If install and update work differently on git URLs, git tags, etc. specified in the package.json then it would be great to add those cases to the example.
@BoyanKushlev I think you mean minor and patch/bugfix, not major and minor. Major is 1 for all your examples.
D
Dan

npm install installs all modules that are listed on package.json file and their dependencies.

npm update updates all packages in the node_modules directory and their dependencies.

npm install express installs only the express module and its dependencies.

npm update express updates express module (starting with npm@2.x, it doesn't update its dependencies).

So updates are for when you already have the module and wish to get the new version.


if you don't specify a particular version in a package.json file, npm install will get the latest version of a module. So this a kind of an update.
So what should I use, npm install or npm update? Or, in other words, I am now using npm install and it seems to do the updating as well, is there any reason why should I ever use npm update?
So update will always update to the latest version, regardless of package.json, while install will respect the version given in package.json?
update installs (or updates to) latest version of module. install installs latest version of module if its not presented otherwise keeps current version.
@Borek npm update will update to the latest version based on your package.json, not regardless of it. If you have "express": "3.x" and you are on version 3.1.0, it will update to the latest 3.x tag. If there is a 4.x version, it will not install the latest.
j
jmav

In most cases, this will install the latest version of the module published on npm.

npm install express --save

or better to upgrade module to latest version use:

npm install express@latest --save --force

--save: Package will appear in your dependencies.

More info: npm-install


npm install express@latest --save --force was exactly what I wanted.
In most cases? Any other cases?
M
MvG

Many distinctions have already been mentioned. Here is one more:

Running npm install at the top of your source directory will run various scripts: prepublish, preinstall, install, postinstall. Depending on what these scripts do, a npm install may do considerably more work than just installing dependencies.

I've just had a use case where prepublish would call make and the Makefile was designed to fetch dependencies if the package.json got updated. Calling npm install from within the Makefile would have lead to an infinite recursion, while calling npm update worked just fine, installing all dependencies so that the build could proceed even if make was called directly.


One implication is that if you updated, for instance, your redis module, and other_module requires an older version of redis, npm install other_module will guarantee that other_module will use the older version. It may add other_module/node_modules/redis if necessary.
D
DSK

npm update: install and update with latest node modules which are in package.json

npm install: install node modules which are defined in package.json(without update)


Using npm version 6.9.0 I observe the following behavior: npm update will omit a large number of dependencies in package-lock.json. To have all required packages available and package-lock.json to be correct, I always have to execute npm install right after npm update.