---
name: "npm-ci"
section: "1"
platform: "linux"
package: "npm"
version: "9.2.0~ds1-3"
release: "Debian 13 (Trixie)"
platforms: ["linux"]
url: "https://new.carta.tech/npm-ci"
---

# npm-ci(1)

## NAME

**npm-ci**

## Synopsis

\<!-- AUTOGENERATED USAGE DESCRIPTIONS --\>

## Description

This command is similar to **npm install**, except\
 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.

The main differences between using **npm install** and **npm ci** are:

- •

  The project **must** have an existing **package-lock.json** or\
   **npm-shrinkwrap.json**.

- •

  If dependencies in the package lock do not match those in **package.json**,\
   **npm ci** will exit with an error, instead of updating the package lock.

- •

  **npm ci** can only install entire projects at a time: individual\
   dependencies cannot be added with this command.

- •

  If a **node\_modules** is already present, it will be automatically removed\
   before **npm ci** begins its install.

- •

  It will never write to **package.json** or any of the package-locks:\
   installs are essentially frozen.

NOTE: If you create your **package-lock.json** file by running **npm install**\
 with flags that can affect the shape of your dependency tree, such as\
 **--legacy-peer-deps** or **--install-links**, you *must* provide the same\
 flags to **npm ci** or you are likely to encounter errors. An easy way to do\
 this is to run, for example,\
 **npm config set legacy-peer-deps=true --location=project** and commit the\
 **.npmrc** file to your repo.

## Example

Make sure you have a package-lock and an up-to-date install:

```
$ cd ./my/npm/project
$ npm install
added 154 packages in 10s
$ ls | grep package-lock
```

Run **npm ci** in that project

```
$ npm ci
added 154 packages in 5s
```

Configure Travis CI to build using **npm ci** instead of **npm install**:

```
# .travis.yml
install:
- npm ci
# keep the npm cache around to speed up installs
cache:
  directories:
  - "$HOME/.npm"
```

## Configuration

\<!-- AUTOGENERATED CONFIG DESCRIPTIONS --\>

## See Also

- •

  npm install

- •

  package-lock.json
