Se você trabalha com projetos em Node.js, é bem provável que já tenha digitado npm i
mais vezes do que consegue lembrar. Mas você já parou para pensar no que faz o npm ci
? É mais rápido? Mais seguro? Ou apenas mais uma opção? Vamos esclarecer essas dúvidas e descobrir qual deles usar em cada situação.
📋 Resumo rápido
- Use
npm install
para flexibilidade no desenvolvimento. - Use
npm ci
para velocidade e consistência em builds ou deploys.
Cada comando tem seu papel—escolha o que melhor se adequa à sua necessidade.
🚀 Por que isso é importante?
Imagine que você está prestes a fazer o deploy de um projeto. Você executa npm install
e… boom! Algo quebra. Talvez uma versão de dependência inesperada tenha aparecido ou o diretório node_modules
tenha ficado meio “bugado”. É aqui que entender a diferença entre esses dois comandos pode salvar o seu dia (e sua sanidade).
🤔 O Básico: O que esses comandos fazem?
npm install (ou npm i)
O comando npm install
é o mais usado para instalar dependências. Ele faz o seguinte:
- Lê o arquivo
package.json
. - Resolve as versões das dependências listadas lá.
- Baixa e instala essas dependências no diretório
node_modules
.
Se você já tiver executado npm install
antes, ele também verificará o arquivo package-lock.json
(se existir) e tentará seguir as versões especificadas lá.
Características principais:
- Flexível: Atualiza automaticamente o
package-lock.json
se encontrar versões mais recentes. - Ótimo para desenvolvimento: Funciona bem enquanto o projeto está em constante evolução.
npm ci
O comando npm ci
(abreviação de Continuous Integration) garante instalações exatamente reproduzíveis. Ele funciona assim:
- Lê o arquivo
package-lock.json
(não apenas opackage.json
). - Remove completamente o diretório
node_modules
e instala as dependências exatamente como especificado nopackage-lock.json
.
Características principais:
- Estrito: Falha se o
package-lock.json
estiver ausente ou desatualizado em relação aopackage.json
. - Rápido: Pula a resolução de dependências e instala diretamente do
package-lock.json
. - Ideal para CI/CD: Garante que o ambiente seja idêntico em todas as execuções.
🕵️♂️ Diferenças principais: npm i vs npm ci
Recurso | npm install | npm ci |
---|---|---|
Resolução de dependências | Resolve versões e atualiza o package-lock.json conforme necessário. | Instala versões exatas do package-lock.json . |
Velocidade | Mais lento devido à resolução de versões. | Mais rápido, pois pula a resolução. |
Caso de uso | Melhor para desenvolvimento local. | Perfeito para CI/CD e deploys. |
Rigor | Funciona mesmo sem um package-lock.json atualizado. | Requer um package-lock.json válido e sincronizado. |
Limpeza do node_modules | Não remove o node_modules . | Remove e reconstrói o node_modules . |
🛠️ Quando usar cada um?
Use npm install
quando:
- Você está em desenvolvimento e pode adicionar/remover dependências.
- Precisa atualizar o
package-lock.json
para refletir mudanças.
Use npm ci
quando:
- Está em um ambiente limpo (ex.: pipeline de CI/CD ou build em Docker).
- A reprodutibilidade é essencial—como para builds de produção.
- Quer garantir que o ambiente siga o
package-lock.json
exatamente.
✨ Curiosidades e Dicas
- Por que “ci”?
Significa Continuous Integration, mas você pode usá-lo fora de pipelines CI/CD—sempre que precisar de instalações consistentes. - npm ci é mais rápido!
Como pula a resolução de dependências, ele pode ser de 2 a 3 vezes mais rápido do quenpm install
. - E se o lock file estiver desatualizado?
Primeiro executenpm install
para sincronizar opackage-lock.json
, depois usenpm ci
nas execuções subsequentes. - Áreas problemáticas:
Se opackage-lock.json
estiver fora de sincronia com opackage.json
, onpm ci
irá falhar. Mantenha esses arquivos atualizados!
💡 Pronto para testar?
Na próxima vez que configurar um projeto, pense no ambiente. Precisa de velocidade e consistência? Vá de npm ci
. Quer flexibilidade? Fique com o npm install
.
Ficou com dúvidas ou tem outra curiosidade sobre npm? Deixe um comentário aqui ou compartilhe este post com aquele amigo dev que ainda está descobrindo o poder do npm
. 🚀