2022-11-07 13:02:05 -05:00
|
|
|
.TH "NPM\-CI" "1" "November 2022" "" ""
|
2018-04-20 18:26:37 -07:00
|
|
|
.SH "NAME"
|
2022-05-25 21:26:36 +00:00
|
|
|
\fBnpm-ci\fR \- Clean install a project
|
2019-11-05 14:55:08 -05:00
|
|
|
.SS Synopsis
|
2018-04-20 18:26:37 -07:00
|
|
|
.P
|
|
|
|
.RS 2
|
|
|
|
.nf
|
|
|
|
npm ci
|
2022-02-24 21:41:49 +00:00
|
|
|
|
|
|
|
aliases: clean\-install, ic, install\-clean, isntall\-clean
|
2018-04-20 18:26:37 -07:00
|
|
|
.fi
|
2020-10-20 17:02:27 -04:00
|
|
|
.RE
|
|
|
|
.SS Description
|
|
|
|
.P
|
2022-11-07 13:02:05 -05:00
|
|
|
This command is similar to npm help install, except
|
2020-10-20 17:02:27 -04:00
|
|
|
it's meant to be used in automated environments such as test platforms,
|
|
|
|
continuous integration, and deployment \-\- or any situation where you want
|
|
|
|
to make sure you're doing a clean install of your dependencies\.
|
|
|
|
.P
|
2022-05-25 21:26:36 +00:00
|
|
|
The main differences between using \fBnpm install\fP and \fBnpm ci\fP are:
|
2020-10-20 17:02:27 -04:00
|
|
|
.RS 0
|
|
|
|
.IP \(bu 2
|
|
|
|
The project \fBmust\fR have an existing \fBpackage\-lock\.json\fP or
|
|
|
|
\fBnpm\-shrinkwrap\.json\fP\|\.
|
|
|
|
.IP \(bu 2
|
|
|
|
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 \(bu 2
|
|
|
|
\fBnpm ci\fP can only install entire projects at a time: individual
|
|
|
|
dependencies cannot be added with this command\.
|
|
|
|
.IP \(bu 2
|
|
|
|
If a \fBnode_modules\fP is already present, it will be automatically removed
|
|
|
|
before \fBnpm ci\fP begins its install\.
|
|
|
|
.IP \(bu 2
|
|
|
|
It will never write to \fBpackage\.json\fP or any of the package\-locks:
|
|
|
|
installs are essentially frozen\.
|
|
|
|
|
2018-04-20 18:26:37 -07:00
|
|
|
.RE
|
2022-04-14 21:57:02 +00:00
|
|
|
.P
|
|
|
|
NOTE: If you create your \fBpackage\-lock\.json\fP file by running \fBnpm install\fP
|
|
|
|
with flags that can affect the shape of your dependency tree, such as
|
2022-04-28 18:41:15 +05:30
|
|
|
\fB\-\-legacy\-peer\-deps\fP or \fB\-\-install\-links\fP, you \fImust\fR provide the same
|
|
|
|
flags to \fBnpm ci\fP or you are likely to encounter errors\. An easy way to do
|
|
|
|
this is to run, for example,
|
2022-04-14 21:57:02 +00:00
|
|
|
\fBnpm config set legacy\-peer\-deps=true \-\-location=project\fP and commit the
|
|
|
|
\fB\|\.npmrc\fP file to your repo\.
|
2019-11-05 14:55:08 -05:00
|
|
|
.SS Example
|
2018-04-20 18:26:37 -07:00
|
|
|
.P
|
|
|
|
Make sure you have a package\-lock and an up\-to\-date install:
|
|
|
|
.P
|
|
|
|
.RS 2
|
|
|
|
.nf
|
|
|
|
$ cd \./my/npm/project
|
|
|
|
$ npm install
|
|
|
|
added 154 packages in 10s
|
|
|
|
$ ls | grep package\-lock
|
|
|
|
.fi
|
|
|
|
.RE
|
|
|
|
.P
|
|
|
|
Run \fBnpm ci\fP in that project
|
|
|
|
.P
|
|
|
|
.RS 2
|
|
|
|
.nf
|
|
|
|
$ npm ci
|
|
|
|
added 154 packages in 5s
|
|
|
|
.fi
|
|
|
|
.RE
|
|
|
|
.P
|
2022-08-04 21:23:58 -07:00
|
|
|
Configure Travis CI to build using \fBnpm ci\fP instead of \fBnpm install\fP:
|
2018-04-20 18:26:37 -07:00
|
|
|
.P
|
|
|
|
.RS 2
|
|
|
|
.nf
|
|
|
|
# \.travis\.yml
|
|
|
|
install:
|
|
|
|
\- npm ci
|
|
|
|
# keep the npm cache around to speed up installs
|
|
|
|
cache:
|
|
|
|
directories:
|
|
|
|
\- "$HOME/\.npm"
|
|
|
|
.fi
|
|
|
|
.RE
|
2021-05-20 15:54:50 -04:00
|
|
|
.SS Configuration
|
2022-07-28 11:03:27 -07:00
|
|
|
.SS \fBsave\fP
|
|
|
|
.RS 0
|
|
|
|
.IP \(bu 2
|
|
|
|
Default: \fBtrue\fP unless when using \fBnpm update\fP where it defaults to \fBfalse\fP
|
|
|
|
.IP \(bu 2
|
|
|
|
Type: Boolean
|
|
|
|
|
|
|
|
.RE
|
|
|
|
.P
|
|
|
|
Save installed packages to a \fBpackage\.json\fP file as dependencies\.
|
|
|
|
.P
|
|
|
|
When used with the \fBnpm rm\fP command, removes the dependency from
|
|
|
|
\fBpackage\.json\fP\|\.
|
|
|
|
.P
|
|
|
|
Will also prevent writing to \fBpackage\-lock\.json\fP if set to \fBfalse\fP\|\.
|
|
|
|
.SS \fBsave\-exact\fP
|
|
|
|
.RS 0
|
|
|
|
.IP \(bu 2
|
|
|
|
Default: false
|
|
|
|
.IP \(bu 2
|
|
|
|
Type: Boolean
|
|
|
|
|
|
|
|
.RE
|
|
|
|
.P
|
|
|
|
Dependencies saved to package\.json will be configured with an exact version
|
|
|
|
rather than using npm's default semver range operator\.
|
|
|
|
.SS \fBglobal\fP
|
|
|
|
.RS 0
|
|
|
|
.IP \(bu 2
|
|
|
|
Default: false
|
|
|
|
.IP \(bu 2
|
|
|
|
Type: Boolean
|
|
|
|
|
|
|
|
.RE
|
|
|
|
.P
|
|
|
|
Operates in "global" mode, so that packages are installed into the \fBprefix\fP
|
|
|
|
folder instead of the current working directory\. See
|
|
|
|
npm help folders for more on the differences in behavior\.
|
|
|
|
.RS 0
|
|
|
|
.IP \(bu 2
|
|
|
|
packages are installed into the \fB{prefix}/lib/node_modules\fP folder, instead
|
|
|
|
of the current working directory\.
|
|
|
|
.IP \(bu 2
|
|
|
|
bin files are linked to \fB{prefix}/bin\fP
|
|
|
|
.IP \(bu 2
|
|
|
|
man pages are linked to \fB{prefix}/share/man\fP
|
|
|
|
|
|
|
|
.RE
|
|
|
|
.SS \fBglobal\-style\fP
|
|
|
|
.RS 0
|
|
|
|
.IP \(bu 2
|
|
|
|
Default: false
|
|
|
|
.IP \(bu 2
|
|
|
|
Type: Boolean
|
|
|
|
|
|
|
|
.RE
|
|
|
|
.P
|
|
|
|
Causes npm to install the package into your local \fBnode_modules\fP folder with
|
|
|
|
the same layout it uses with the global \fBnode_modules\fP folder\. Only your
|
|
|
|
direct dependencies will show in \fBnode_modules\fP and everything they depend
|
|
|
|
on will be flattened in their \fBnode_modules\fP folders\. This obviously will
|
|
|
|
eliminate some deduping\. If used with \fBlegacy\-bundling\fP, \fBlegacy\-bundling\fP
|
|
|
|
will be preferred\.
|
|
|
|
.SS \fBlegacy\-bundling\fP
|
|
|
|
.RS 0
|
|
|
|
.IP \(bu 2
|
|
|
|
Default: false
|
|
|
|
.IP \(bu 2
|
|
|
|
Type: Boolean
|
|
|
|
|
|
|
|
.RE
|
|
|
|
.P
|
|
|
|
Causes npm to install the package such that versions of npm prior to 1\.4,
|
|
|
|
such as the one included with node 0\.8, can install the package\. This
|
|
|
|
eliminates all automatic deduping\. If used with \fBglobal\-style\fP this option
|
|
|
|
will be preferred\.
|
|
|
|
.SS \fBomit\fP
|
|
|
|
.RS 0
|
|
|
|
.IP \(bu 2
|
|
|
|
Default: 'dev' if the \fBNODE_ENV\fP environment variable is set to
|
|
|
|
\|'production', otherwise empty\.
|
|
|
|
.IP \(bu 2
|
|
|
|
Type: "dev", "optional", or "peer" (can be set multiple times)
|
|
|
|
|
|
|
|
.RE
|
|
|
|
.P
|
|
|
|
Dependency types to omit from the installation tree on disk\.
|
|
|
|
.P
|
|
|
|
Note that these dependencies \fIare\fR still resolved and added to the
|
|
|
|
\fBpackage\-lock\.json\fP or \fBnpm\-shrinkwrap\.json\fP file\. They are just not
|
|
|
|
physically installed on disk\.
|
|
|
|
.P
|
|
|
|
If a package type appears in both the \fB\-\-include\fP and \fB\-\-omit\fP lists, then
|
|
|
|
it will be included\.
|
|
|
|
.P
|
|
|
|
If the resulting omit list includes \fB\|'dev'\fP, then the \fBNODE_ENV\fP environment
|
|
|
|
variable will be set to \fB\|'production'\fP for all lifecycle scripts\.
|
|
|
|
.SS \fBstrict\-peer\-deps\fP
|
|
|
|
.RS 0
|
|
|
|
.IP \(bu 2
|
|
|
|
Default: false
|
|
|
|
.IP \(bu 2
|
|
|
|
Type: Boolean
|
|
|
|
|
|
|
|
.RE
|
|
|
|
.P
|
|
|
|
If set to \fBtrue\fP, and \fB\-\-legacy\-peer\-deps\fP is not set, then \fIany\fR
|
|
|
|
conflicting \fBpeerDependencies\fP will be treated as an install failure, even
|
|
|
|
if npm could reasonably guess the appropriate resolution based on non\-peer
|
|
|
|
dependency relationships\.
|
|
|
|
.P
|
|
|
|
By default, conflicting \fBpeerDependencies\fP deep in the dependency graph will
|
|
|
|
be resolved using the nearest non\-peer dependency specification, even if
|
|
|
|
doing so will result in some packages receiving a peer dependency outside
|
|
|
|
the range set in their package's \fBpeerDependencies\fP object\.
|
|
|
|
.P
|
|
|
|
When such and override is performed, a warning is printed, explaining the
|
|
|
|
conflict and the packages involved\. If \fB\-\-strict\-peer\-deps\fP is set, then
|
|
|
|
this warning is treated as a failure\.
|
|
|
|
.SS \fBpackage\-lock\fP
|
2021-07-15 20:09:18 +00:00
|
|
|
.RS 0
|
|
|
|
.IP \(bu 2
|
|
|
|
Default: true
|
|
|
|
.IP \(bu 2
|
|
|
|
Type: Boolean
|
|
|
|
|
|
|
|
.RE
|
|
|
|
.P
|
2022-07-28 11:03:27 -07:00
|
|
|
If set to false, then ignore \fBpackage\-lock\.json\fP files when installing\. This
|
|
|
|
will also prevent \fIwriting\fR \fBpackage\-lock\.json\fP if \fBsave\fP is true\.
|
|
|
|
.P
|
|
|
|
This configuration does not affect \fBnpm ci\fP\|\.
|
2022-03-17 20:22:31 +00:00
|
|
|
.SS \fBforeground\-scripts\fP
|
|
|
|
.RS 0
|
|
|
|
.IP \(bu 2
|
|
|
|
Default: false
|
|
|
|
.IP \(bu 2
|
|
|
|
Type: Boolean
|
|
|
|
|
|
|
|
.RE
|
|
|
|
.P
|
|
|
|
Run all build scripts (ie, \fBpreinstall\fP, \fBinstall\fP, and \fBpostinstall\fP)
|
|
|
|
scripts for installed packages in the foreground process, sharing standard
|
|
|
|
input, output, and error with the main npm process\.
|
|
|
|
.P
|
|
|
|
Note that this will generally make installs run slower, and be much noisier,
|
|
|
|
but can be useful for debugging\.
|
2021-05-20 15:54:50 -04:00
|
|
|
.SS \fBignore\-scripts\fP
|
|
|
|
.RS 0
|
|
|
|
.IP \(bu 2
|
|
|
|
Default: false
|
|
|
|
.IP \(bu 2
|
|
|
|
Type: Boolean
|
|
|
|
|
|
|
|
.RE
|
|
|
|
.P
|
|
|
|
If true, npm does not run scripts specified in package\.json files\.
|
|
|
|
.P
|
|
|
|
Note that commands explicitly intended to run a particular script, such as
|
|
|
|
\fBnpm start\fP, \fBnpm stop\fP, \fBnpm restart\fP, \fBnpm test\fP, and \fBnpm run\-script\fP
|
|
|
|
will still run their intended script if \fBignore\-scripts\fP is set, but they
|
|
|
|
will \fInot\fR run any pre\- or post\-scripts\.
|
2022-07-28 11:03:27 -07:00
|
|
|
.SS \fBaudit\fP
|
|
|
|
.RS 0
|
|
|
|
.IP \(bu 2
|
|
|
|
Default: true
|
|
|
|
.IP \(bu 2
|
|
|
|
Type: Boolean
|
|
|
|
|
|
|
|
.RE
|
|
|
|
.P
|
|
|
|
When "true" submit audit reports alongside the current npm command to the
|
|
|
|
default registry and all registries configured for scopes\. See the
|
2022-11-07 13:02:05 -05:00
|
|
|
documentation for npm help audit for details on what is
|
2022-07-28 11:03:27 -07:00
|
|
|
submitted\.
|
|
|
|
.SS \fBbin\-links\fP
|
|
|
|
.RS 0
|
|
|
|
.IP \(bu 2
|
|
|
|
Default: true
|
|
|
|
.IP \(bu 2
|
|
|
|
Type: Boolean
|
|
|
|
|
|
|
|
.RE
|
|
|
|
.P
|
|
|
|
Tells npm to create symlinks (or \fB\|\.cmd\fP shims on Windows) for package
|
|
|
|
executables\.
|
|
|
|
.P
|
|
|
|
Set to false to have it not do this\. This can be used to work around the
|
|
|
|
fact that some file systems don't support symlinks, even on ostensibly Unix
|
|
|
|
systems\.
|
|
|
|
.SS \fBfund\fP
|
2021-05-20 15:54:50 -04:00
|
|
|
.RS 0
|
|
|
|
.IP \(bu 2
|
2022-07-28 11:03:27 -07:00
|
|
|
Default: true
|
|
|
|
.IP \(bu 2
|
|
|
|
Type: Boolean
|
|
|
|
|
|
|
|
.RE
|
|
|
|
.P
|
|
|
|
When "true" displays the message at the end of each \fBnpm install\fP
|
2022-11-07 13:02:05 -05:00
|
|
|
acknowledging the number of dependencies looking for funding\. See npm help fund for details\.
|
2022-07-28 11:03:27 -07:00
|
|
|
.SS \fBdry\-run\fP
|
|
|
|
.RS 0
|
2021-05-20 15:54:50 -04:00
|
|
|
.IP \(bu 2
|
2022-07-28 11:03:27 -07:00
|
|
|
Default: false
|
|
|
|
.IP \(bu 2
|
|
|
|
Type: Boolean
|
|
|
|
|
|
|
|
.RE
|
|
|
|
.P
|
|
|
|
Indicates that you don't want npm to make any changes and that it should
|
|
|
|
only report what it would have done\. This can be passed into any of the
|
|
|
|
commands that modify your local installation, eg, \fBinstall\fP, \fBupdate\fP,
|
|
|
|
\fBdedupe\fP, \fBuninstall\fP, as well as \fBpack\fP and \fBpublish\fP\|\.
|
|
|
|
.P
|
|
|
|
Note: This is NOT honored by other network related commands, eg \fBdist\-tags\fP,
|
|
|
|
\fBowner\fP, etc\.
|
|
|
|
.SS \fBworkspace\fP
|
|
|
|
.RS 0
|
|
|
|
.IP \(bu 2
|
|
|
|
Default:
|
|
|
|
.IP \(bu 2
|
|
|
|
Type: String (can be set multiple times)
|
|
|
|
|
|
|
|
.RE
|
|
|
|
.P
|
|
|
|
Enable running a command in the context of the configured workspaces of the
|
|
|
|
current project while filtering by running only the workspaces defined by
|
|
|
|
this configuration option\.
|
|
|
|
.P
|
|
|
|
Valid values for the \fBworkspace\fP config are either:
|
|
|
|
.RS 0
|
|
|
|
.IP \(bu 2
|
|
|
|
Workspace names
|
|
|
|
.IP \(bu 2
|
|
|
|
Path to a workspace directory
|
|
|
|
.IP \(bu 2
|
|
|
|
Path to a parent workspace directory (will result in selecting all
|
|
|
|
workspaces within that folder)
|
|
|
|
|
|
|
|
.RE
|
|
|
|
.P
|
|
|
|
When set for the \fBnpm init\fP command, this may be set to the folder of a
|
|
|
|
workspace which does not yet exist, to create the folder and set it up as a
|
|
|
|
brand new workspace within the project\.
|
|
|
|
.P
|
|
|
|
This value is not exported to the environment for child processes\.
|
|
|
|
.SS \fBworkspaces\fP
|
|
|
|
.RS 0
|
|
|
|
.IP \(bu 2
|
|
|
|
Default: null
|
|
|
|
.IP \(bu 2
|
|
|
|
Type: null or Boolean
|
|
|
|
|
|
|
|
.RE
|
|
|
|
.P
|
|
|
|
Set to true to run the command in the context of \fBall\fR configured
|
|
|
|
workspaces\.
|
|
|
|
.P
|
|
|
|
Explicitly setting this to false will cause commands like \fBinstall\fP to
|
|
|
|
ignore workspaces altogether\. When not set explicitly:
|
|
|
|
.RS 0
|
|
|
|
.IP \(bu 2
|
|
|
|
Commands that operate on the \fBnode_modules\fP tree (install, update, etc\.)
|
|
|
|
will link workspaces into the \fBnode_modules\fP folder\. \- Commands that do
|
|
|
|
other things (test, exec, publish, etc\.) will operate on the root project,
|
|
|
|
\fIunless\fR one or more workspaces are specified in the \fBworkspace\fP config\.
|
|
|
|
|
|
|
|
.RE
|
|
|
|
.P
|
|
|
|
This value is not exported to the environment for child processes\.
|
|
|
|
.SS \fBinclude\-workspace\-root\fP
|
|
|
|
.RS 0
|
|
|
|
.IP \(bu 2
|
|
|
|
Default: false
|
|
|
|
.IP \(bu 2
|
|
|
|
Type: Boolean
|
|
|
|
|
|
|
|
.RE
|
|
|
|
.P
|
|
|
|
Include the workspace root when workspaces are enabled for a command\.
|
|
|
|
.P
|
|
|
|
When false, specifying individual workspaces via the \fBworkspace\fP config, or
|
|
|
|
all workspaces via the \fBworkspaces\fP flag, will cause npm to operate only on
|
|
|
|
the specified workspaces, and not on the root project\.
|
|
|
|
.P
|
|
|
|
This value is not exported to the environment for child processes\.
|
|
|
|
.SS \fBinstall\-links\fP
|
|
|
|
.RS 0
|
|
|
|
.IP \(bu 2
|
|
|
|
Default: false
|
|
|
|
.IP \(bu 2
|
|
|
|
Type: Boolean
|
2021-05-20 15:54:50 -04:00
|
|
|
|
|
|
|
.RE
|
|
|
|
.P
|
2022-07-28 11:03:27 -07:00
|
|
|
When set file: protocol dependencies that exist outside of the project root
|
|
|
|
will be packed and installed as regular dependencies instead of creating a
|
|
|
|
symlink\. This option has no effect on workspaces\.
|
2019-11-05 14:55:08 -05:00
|
|
|
.SS See Also
|
2018-04-20 18:26:37 -07:00
|
|
|
.RS 0
|
|
|
|
.IP \(bu 2
|
2019-11-18 21:01:39 +02:00
|
|
|
npm help install
|
2018-04-20 18:26:37 -07:00
|
|
|
.IP \(bu 2
|
2022-11-07 13:02:05 -05:00
|
|
|
package\-lock\.json \fI/configuring\-npm/package\-lock\-json\fR
|
2018-04-20 18:26:37 -07:00
|
|
|
|
|
|
|
.RE
|