Verifique o npm e atualize o pacote, se necessário

471

Precisamos integrar o Karma Test Runner ao TeamCity e, para isso, gostaria de fornecer um pequeno script ao sys-engineer (powershell ou qualquer outra coisa) que:

  1. escolha o número da versão desejada em algum arquivo de configuração (acho que posso colocá-lo como um comentário direto no karma.conf.js)

  2. verifique se a versão definida do karma runner instalada no repositório global da npm

  3. caso contrário, ou a versão instalada é mais antiga que o desejado: escolha e instale a versão correta

  4. executá-lo: karma start .\Scripts-Tests\karma.conf.js --reporters teamcity --single-run

Portanto, minha verdadeira pergunta é: "como é possível fazer o check-in de um script, se a versão desejada do pacote estiver instalada?". Você deve fazer a verificação ou é seguro ligar npm -g installsempre?

Não quero sempre verificar e instalar a versão mais recente disponível, porque outros valores de configuração podem se tornar incompatíveis

iLemming
fonte

Respostas:

609

Para verificar se algum módulo de um projeto é 'antigo':

npm outdated

' desatualizado ' irá verificar todos os módulos definidos package.jsone verificar se há uma versão mais recente no registro do NPM.

Por exemplo, digamos xml2js 0.2.6(localizado no node_modulesprojeto atual) está desatualizado porque existe uma versão mais nova (0.2.7). Você veria:

xml2js@0.2.7 node_modules/xml2js current=0.2.6

Para atualizar todas as dependências, se você tiver certeza de que isso é desejável:

npm update

Ou, para atualizar uma única dependência, como xml2js:

npm update xml2js
dublx
fonte
6
Tenha cuidado com npm updateespecialmente com npm update -g... não faz o que a maioria dos pavões espera que faça! Veja: github.com/npm/npm/issues/6247 e gist.github.com/othiym23/4ac31155da23962afd0e
jbandi
6
@jbandi A partir de [email protected], npm -g updateé seguro usá-lo novamente. github.com/npm/npm/issues/6247#issuecomment-92182814
Chuck Le Butt
7
Esteja ciente de que o npm update não atualizará o arquivo package.json, conforme indicado pela resposta de @Erik Olson.
Ehtesham Hasan
5
As of [email protected], 'npm update' will change package.json to save the new version as the minimum required dependency docs.npmjs.com/cli/update.html
Sidney
368

npm outdatedidentificará pacotes que devem ser atualizados e npm update <package name>podem ser usados ​​para atualizar cada pacote. Porém, antes de [email protected], npm update <package name>as versões do seu package.json não serão atualizadas, o que é um problema.

O melhor fluxo de trabalho é:

  1. Identifique pacotes desatualizados
  2. Atualize as versões no seu package.json
  3. Execute npm updatepara instalar as versões mais recentes de cada pacote

Confira npm-check-updatespara ajudar com esse fluxo de trabalho.

  • Instale o npm-check-updates
  • Corra npm-check-updatespara listar quais pacotes estão desatualizados (basicamente a mesma coisa que em execução npm outdated)
  • Execute npm-check-updates -upara atualizar todas as versões do seu package.json (este é o molho mágico)
  • Execute npm updatecomo de costume para instalar as novas versões dos seus pacotes com base no package.json atualizado
Erik Olson
fonte
3
npm outdatedmostrará TODOS os pacotes .. mesmo dentro de outros pacotes .. mas esses não serão atualizados com este procedimento, para que sempre apareçam .. então use npm-check-updates(como você realmente recomendou) que mostra apenas os pacotes principais de package.json... isso é relevante
Davidhq
Com fio, isso é muito mais fácil, basta digitar 'upgrade de fio'.
9788 Christopher Grigg #
17
Por que devo instalar um gerenciador de atualizações para gerenciar meu gerenciador de pacotes? Não concordamos que isso é bobagem? Deve ser tão simples como npm install --all-outdated, mas não é ...
ADJenks
3
Você sempre pode executar npm update --save package_namepara salvar as alterações mais recentes no package.json.
trungk18
Erik, você pode gentilmente responder a essa pergunta relacionada ao SO , porque ainda é um pouco confusa para mim a diferença entre os dois comandos, ou seja, npm updatevs npm-check-updates?
João Pimentel Ferreira
146

Há também um módulo "novo" chamado npm-check:

npm-check

Verifique se há dependências desatualizadas, incorretas e não utilizadas.

insira a descrição da imagem aqui

Ele também fornece uma maneira interativa conveniente de atualizar as dependências.

alecxe
fonte
78

Um passo fácil:

$ npm i -g npm-check-updates && ncu -u && npm i

Isso é tudo. Todas as versões do pacote package.jsonserão as principais versões mais recentes.

Editar:

O que esta acontecendo aqui?

  1. Instalando um pacote que verifica as atualizações para você.

  2. Use este pacote para atualizar todas as versões do seu pacote package.json(-u é a abreviação de --updateAll).

  3. Instale todas as novas versões dos pacotes.

Matt
fonte
3
@imnickvaughn ncusignifica node-check-updates e -aé a opção 'upgradeAll'. Encontrar todas as opções aqui: npmjs.com/package/npm-check-updates
Arian Acosta
E se eu quiser fazer isso em uma linha sem usar outro pacote como o ncu?
precisa saber é o seguinte
Ou sem a instalação global,npx -p npm-check-updates ncu -u
entozoon
68
  • Para atualizar um único pacote local:

    1. Primeiro descubra seus pacotes desatualizados:

      npm outdated

    2. Atualize o pacote ou pacotes que você deseja manualmente como:

      npm update --save package_name

Dessa forma, não é necessário atualizar seu package.json arquivo local .

Observe que isso atualizará seu pacote para a versão mais recente.

  • Se você escreve alguma versão no seu package.jsonarquivo e faz:

    npm update package_name

    Nesse caso, você obterá apenas a próxima versão estável (desejada) referente à versão que você escreveu em seu package.jsonarquivo.

E npm list (package_name)você pode descobrir a versão atual dos seus pacotes locais.

Relojoeiro
fonte
14

Comandos do NPM para atualizar ou corrigir vulnerabilidades em alguns arquivos de manifesto de dependência

  • Use o comando abaixo para verificar vulnerabilidades desatualizadas ou nos módulos de nós.

    npm audit

  • Se alguma vulnerabilidade for encontrada, use o comando abaixo para corrigir todos os problemas.

    npm audit fix

  • Se não funcionar para você, tente

    npm audit fix -f, esse comando quase corrigirá todas as vulnerabilidades. Algumas dependências ou devDependencies estão bloqueadas no arquivo package-lock.json , portanto, usamos -fflag para forçá-las a atualizá-las.

  • Se você não quiser usar a correção forçada de auditoria, poderá corrigir manualmente as versões de suas dependências alterando-as nos arquivos package-lock.json e package.json . Então corra

npm update && npm upgrade

Smit Patel
fonte
10

Sem pacotes adicionais, para apenas desatualizar e atualizar os que são, este comando fará:

npm install $(npm outdated | cut -d' ' -f 1 | sed '1d' | xargs -I '$' echo '$@latest' | xargs echo)

MikeMajara
fonte
Coisas boas cara, obrigado!
drKreso 6/02
Essa é uma ótima resposta, pois pode ser colocada em qualquer script de shell para automatizar esta etapa sem depender de qualquer pacote adicional instalado.
Jankapunkt
4

Ao instalar pacotes npm (global ou localmente), você pode definir uma versão específica usando a @versionsintaxe para definir uma versão a ser instalada.

Em outras palavras, doing: npm install -g [email protected] garantirá que apenas 0.9.2 esteja instalado e não será reinstalado se já existir.

Como uma palavra de conselho, sugiro evitar instalações globais do npm sempre que possível. Muitas pessoas não percebem que, se uma dependência define um arquivo bin, ele é instalado em ./node_modules/.bin/. Freqüentemente, é muito fácil usar a versão local de um módulo instalado definido em seu package.json. De fato, os scripts npm adicionam o ./node_modules/.bin ao seu caminho.

Como exemplo, aqui está um package.json que, quando eu executo npm install && npm test, instala a versão do karma definida em meu package.json e usa essa versão do karma (instalada em node_modules / .bin / karma) ao executar o testscript:

{
 "name": "myApp",
 "main": "app.js",
 "scripts": {
   "test": "karma test/*",
 },
 "dependencies": {...},
 "devDependencies": {
   "karma": "0.9.2"
 }
}

Isso oferece o benefício do package.json, que define a versão do karma a ser usada e não precisa manter essa configuração globalmente na sua caixa de IC.

addisonj
fonte
o que há no testscript? Você pode me dar uma pista de como instalá-lo com um script.
iLemming
1
Veja o package.json. Sob a propriedade "scripts", você pode definir outra propriedade, "test", cujo valor é um comando que você deseja executar ao digitar npm test. Os documentos do npm são muito bons aqui: npmjs.org/doc/scripts.html
addisonj
4

A partir de [email protected]+, você pode simplesmente fazer:

npm update <package name>

Isso atualizará automaticamente o package.jsonarquivo. Não precisamos atualizar a versão mais recente manualmente e, em seguida, usarnpm update <package name>

Você ainda pode obter o comportamento antigo usando

npm update --no-save

( Referência )

adiga
fonte
1

Para realmente atualizar apenas um pacote, instale o NCU e execute-o apenas para esse pacote. Isso vai bater com o mais recente real.

npm install -g npm-check-updates

ncu -f your-intended-package-name -u
regisbsb
fonte
6
Postagem de baixa qualidade, alguma explicação melhor ajudaria.
linuxfan diz Restabelecer Monica