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
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.
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
?
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.
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.
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.
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.
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.
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)
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
.
Success story sharing
~1.3
?npm install --save somePackage
save the * to dependencies?postinstall
run on install, but not on update.install
andupdate
work differently on git URLs, git tags, etc. specified in thepackage.json
then it would be great to add those cases to the example.