Testando o comando "npm ci"

Leandro Nunes
Meninunes
Published in
2 min readMar 5, 2018

Resolvi testar o novíssimo comando do npm lançado agora na versão 5.7.0,
o comando npm ci.

$ npm ci

Este é um comando voltado aos pipelines de CI (Continuous Integration) como Jenkins, Travis e CircleCI por exemplo, onde promete um ganho de performance absurda, em alguns casos chegando a 10x mais rápido em comparação ao npm install.

A ideia por trás do comando é jogar fora a pasta node_modules (caso exista) e recriá-la novamente do zero, de forma a sempre manter uma instalação limpa no ambiente de deploy.

Pré-requisitos

  • Versão 5.7.0+ do npm
  • Existir o arquivo package-lock.json versionado e que ele esteja sincronizado com o arquivo package.json, caso contrário será reportado um erro.
// Caso ainda não exista, para gerar o arquivo package-lock.json
$ npm install

Exemplo de erro caso os arquivos não estejam em sincronia:
Invalid: lock file’s jest@22.1.4 does not satisfy jest@22.3

Testando

Para validar o comando e comparar a performance anunciada, utilizei um projeto em React-Native v0.52.2

Local (desenvolvimento)

// Instalação limpa (SEM arquivo lock)
$ npm install
added 939 packages from 507 contributors in 75.477s
// Segunda instalação (COM arquivo lock)
$ npm install
up to date in 8.556s

Remoto (CI)

// Instalação limpa
$ npm ci
added 939 packages in 22.618s

Como podemos notar, comparando a performance dos dois comandos, o comando npm ci não é tão performático quanto um install local com lock (e talvez nunca será, pois não é o propósito), porém ele rodou cerca de 30% do tempo que levaria o npm install limpo! 👏🏼

🚀 Realmente parece bem promissor !!!

Este foi apenas um simples teste e em um único projeto. Caso obtenha melhores resultados com seus projetos, deixe nos comentários abaixo

Se curtiu o artigo, não deixe de clicar no “Clap” para ajudar na divulgação e o artigo alcançar mais pessoas. :)
Abraços

--

--