Meninunes
Published in

Meninunes

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

--

--

--

Web Development by — Leandro “Little Big” Nunes

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store
Leandro Nunes

Leandro Nunes

Software Engineer @ CI&T | https://lnfnunes.com.br

More from Medium

Learn TypeScript With Examples

Getting started with Cypress.io

How To Dockerize MERN Stack — Typescript Version

Preparing for technical interviews part 1 — pre interview