Testando o comando "npm ci"
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