Diferença entre npm ci e npm install


Não, npm ci e npm install não são a mesma coisa, apesar de ambos instalarem dependências. Eles têm objetivos e comportamentos diferentes.

Vou resumir de um jeito bem direto:

npm install

Usa o package.json como base.

Se não existir package-lock.json:
  • Resolve as versões das dependências.
  • Cria um package-lock.json.
Se já existir package-lock.json:
  • Tenta respeitar o lock, mas pode atualizar o package-lock.json em algumas situações (por exemplo: dependências sem versão travada, ranges tipo ^1.2.0, etc.).
  • Pode adicionar novas dependências (ex.: npm install axios --save), alterando tanto o package.json quanto o package-lock.json.
É o comando padrão para o desenvolvimento do dia a dia.

Resumindo: mais flexível, pode modificar o package-lock.json e não garante uma instalação 100% idêntica entre máquinas.

npm ci

Usa o package-lock.json como verdade absoluta.
  • Exige que o package-lock.json exista.
  • Ignora o que está no package.json se conflitar com o lock: o que vale é o package-lock.json.
  • Apaga a pasta node_modules inteira antes de instalar.
  • Não altera o package-lock.json.
  • É bem mais rápido e previsível.

Se faltar algo ou houver inconsistência entre package.json e package-lock.json, ele falha (erro), justamente para garantir consistência.

Resumindo: travado, previsível e rápido. Ideal para:
  • CI/CD (pipelines de build)
  • Produção
  • Qualquer ambiente em que você quer que a instalação seja idêntica ao que está no lock.

Quando usar cada um?

Desenvolvimento local (alterando dependências)
  • npm install
Build em pipeline / servidor de CI / Docker / produção
  • npm ci

Comentários