Um bom fluxo de trabalho do Node.js. para manter os pacotes atualizados?


8

Recentemente, comecei a desenvolver um projeto no Node.js. É claro que, no momento, os pacotes que estou usando estão bastante atualizados, pois estou começando de novo e usando a versão mais recente, mas há uma taxa de rotatividade de versão bastante alta para a maioria dos pacotes Node.js. preterido ou descartado e, é claro, as vulnerabilidades de segurança serão corrigidas.

Como a maioria dos meus pacotes é especificada usando a sintaxe de versão semântica ^1.2.3(atenha-se ao número da versão principal fornecida para evitar alterações), quaisquer atualizações importantes além da versão principal atual serão perdidas.

Qual é uma maneira prudente de garantir que você esteja razoavelmente atualizado com suas dependências? É necessário colocar, por exemplo, uma verificação semanal de atualizações em suas dependências no seu fluxo de trabalho para garantir que você não fique para trás? E por esse motivo, seria uma boa idéia tentar minimizar as dependências para minimizar a dor de lidar com as alterações posteriores quando você necessariamente atualiza para versões principais mais recentes?


1. Conheça uma atualização do pacote, 2. Avalie as alterações feitas na atualização, 3. Decida se as alterações são úteis e relevantes para o seu projeto. Se estiverem, 4. Atualize o pacote para a nova versão.
Robert Harvey

@Robert Harvey. Meu projeto de nó simples usa cerca de uma dezena de pacotes principais diretamente, e possivelmente cem indiretamente. Sua abordagem não é escalável. Essa é uma boa pergunta para verificar se existe uma maneira mais fácil e automatizada.
user949300

1
@Jez, você já viu o npm-check-updates ou o npm outdatedcomando? Nunca usei a mim mesmo, mas eles parecem um começo.
user949300

Se você estiver usando o GitHub, poderá tentar algo como o Greenkeeper, que executará seus testes em novas versões de suas dependências.
Whymarrh

Respostas:


6

Esse é o fluxo de trabalho que atualmente uso para um projeto com lançamentos mensais.

  • Após o lançamento, verifique as dependências e atualize aquelas que possuem apenas pequenas alterações e atualizações de patches. Como o npm segue o controle de versão semântico, se os autores dos pacotes funcionarem bem, isso não deve prejudicar o sistema.
  • Execute um teste de fumaça e, se alguma dependência estiver quebrada, crie uma tarefa para desenvolvimento para atualizar essa dependência. Pode ser um ticket, pode ser uma tarefa para o seu sprint etc. O ponto é que a atualização não é imediata e exigirá trabalho, portanto você deve agendá-lo. Qualquer comentário da sua primeira tentativa ajudará.
  • Agende tarefas para atualizar dependências que possuem grandes alterações.
  • Congele suas dependências para as versões mais recentes.

O objetivo não é ter atualizações automáticas. Eles podem quebrar seu sistema de uma maneira que você não espera e muito provavelmente quando estava fazendo outras alterações, o que não ajudará a descobrir qual é o problema.

A atualização de dependências deve ser um processo consciente e, se alguma delas quebrar seu sistema, você deve estar ciente de qual delas.

Atualizações menores que passam despercebidas provavelmente serão detectadas em seu sprint de desenvolvimento ou teste, e é por isso que você faz isso após o lançamento, porque deseja tanto tempo para detectá-lo e reagir a esse problema antes de entrar no ar.

Observe que eu realmente uso esse processo em um projeto de dependências do .NET + Nuget, mas ele se aplica a Node e npm / bower, Rails + bundle etc.

Finalmente, você pode fazer uso de comandos legais que ajudarão você a congelar / descongelar dependências, até mesmo adicionando-os ao seu repositório. Veja npm shrinkwrap.


0

Eu uso outra solução com uma abordagem diferente https://uptodatenpm.com. Ele envia um boletim semanal com informações de novas versões das dependências do seu projeto, para que você possa decidir quais departamentos atualizar.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.