npm ci în Node.js

npm și pachete npm 5.7

Instalare curată și exactă după package-lock.json, pentru servere de build, CI și producție.

Sintaxă
npm ci [--omit=dev]

Ce face npm ci

npm ci (de la „clean install”) instalează exact versiunile din package-lock.json. Spre deosebire de npm install, nu modifică niciodată package.json sau package-lock.json: dacă cele două fișiere nu se potrivesc (cineva a adăugat o dependență și nu a actualizat lock-ul), comanda se oprește cu eroare.

Dacă există deja un director node_modules, îl șterge și îl reface de la zero. Rezultatul este același pe orice calculator, așa că npm ci este comanda potrivită în GitHub Actions, în Dockerfile și pe serverul de producție.

Fără package-lock.json (sau npm-shrinkwrap.json) comanda refuză să ruleze. Nu poate instala un pachet anume: npm ci lodash nu există.

Parametri

Parametru Descriere
--omit=dev Sare peste devDependencies.
--ignore-scripts Nu rulează scripturile pachetelor (preinstall, postinstall).

Exemple

Exemplul 1: Instalare curată

npm ci

Ieșire în terminal

added 3 packages, and audited 4 packages in 706ms

1 package is looking for funding
  run `npm fund` for details

found 0 vulnerabilities

Exemplul 2: Proiect fără package-lock.json

Primele rânduri ale erorii. Rezolvarea: rulează o dată npm install și pune în Git fișierul package-lock.json generat.

npm ci

Ieșire în terminal

npm error code EUSAGE
npm error
npm error The `npm ci` command can only install with an existing package-lock.json or
npm error npm-shrinkwrap.json with lockfileVersion >= 1. Run an install with npm@5 or
npm error later to generate a package-lock.json file, then try again.

Exemplul 3: În GitHub Actions

Un pas tipic dintr-un fișier .github/workflows/teste.yml: instalare exactă, apoi testele.

- uses: actions/setup-node@v4
  with:
    node-version: 24
    cache: npm
- run: npm ci
- run: npm test

Greșeli frecvente

  • Folosești npm install în CI: poate actualiza lock-ul în timpul build-ului și primești alte versiuni decât pe calculatorul tău.
  • Modifici package.json de mână și nu rulezi npm install după: lock-ul rămâne în urmă și npm ci spune că fișierele nu sunt sincronizate.
  • Rulezi npm ci local doar ca să adaugi un pachet: comanda nu primește nume de pachete și șterge node_modules la fiecare rulare.

Comenzi înrudite

  • npm install: Instalează pachete din registrul npm în node_modules și le trece în package.json și package-lock.json.
  • package-lock.json: Fișierul în care npm notează versiunea exactă a fiecărui pachet instalat, ca toată lumea să primească același node_modules.
  • npm audit: Verifică dependențele în baza de vulnerabilități cunoscute și le actualizează automat cu npm audit fix.
  • npm run: Rulează un script din câmpul „scripts” al package.json, cu node_modules/.bin în PATH și cu scripturile pre/post.