incrementally\-installed local environments of most npm users\.
.P
In short, the main differences between using \fBnpm install\fP and \fBnpm ci\fP are:
.RS0
.IP\(bu2
The project \fBmust\fR have an existing \fBpackage\-lock\.json\fP or \fBnpm\-shrinkwrap\.json\fP\|\.
.IP\(bu2
If dependencies in the package lock do not match those in \fBpackage\.json\fP, \fBnpm ci\fP will exit with an error, instead of updating the package lock\.
.IP\(bu2
\fBnpm ci\fP can only install entire projects at a time: individual dependencies cannot be added with this command\.
.IP\(bu2
If a \fBnode_modules\fP is already present, it will be automatically removed before \fBnpm ci\fP begins its install\.
.IP\(bu2
It will never write to \fBpackage\.json\fP or any of the package\-locks: installs are essentially frozen\.