O Node Package Manager foi corrompido de alguma forma, agora não pode ser instalado

13

Encontrei um problema hoje quando decidi usar npm update -gum diretório de aplicativos nodejs. Esta foi uma péssima decisão, porque me levou a encontrar um problema comum e desastroso com o npm .

A solução é reinstalar o nodejs e o npm. Infelizmente, quando instalo o npm, sudo apt-get install npmele não funciona.

O erro completo no terminal está aqui:

Some packages could not be installed. This may mean that you have requested
an impossible situation or if you are using the unstable distribution that 
some required packages have not yet been created or been moved out of Incoming.
The following information may help to resolve the situation:
The following packages have unmet dependencies:
 npm : Depends: nodejs but it is not going to be installed
   Depends: node-abbrev (>= 1.0.4) but it is not going to be installed
   Depends: node-ansi but it is not going to be installed
   Depends: node-archy but it is not going to be installed
   Depends: node-block-stream but it is not going to be installed
   Depends: node-fstream (>= 0.1.22) but it is not going to be installed
   Depends: node-fstream-ignore but it is not going to be installed
   Depends: node-github-url-from-git but it is not going to be installed
   Depends: node-glob (>= 3.1.21) but it is not going to be installed
   Depends: node-graceful-fs (>= 2.0.0) but it is not going to be installed
   Depends: node-inherits but it is not going to be installed
   Depends: node-ini (>= 1.1.0) but it is not going to be installed
   Depends: node-lockfile but it is not going to be installed
   Depends: node-lru-cache (>= 2.3.0) but it is not going to be installed
   Depends: node-minimatch (>= 0.2.11) but it is not going to be installed
   Depends: node-mkdirp (>= 0.3.3) but it is not going to be installed
   Depends: node-gyp (>= 0.10.9) but it is not going to be installed
   Depends: node-nopt (>= 2.1.1) but it is not going to be installed
   Depends: node-npmlog but it is not going to be installed
   Depends: node-once but it is not going to be installed
   Depends: node-osenv but it is not going to be installed
   Depends: node-read but it is not going to be installed
   Depends: node-read-package-json (>= 1.1.0) but it is not going to be installed
   Depends: node-request (>= 2.25.0) but it is not going to be installed
   Depends: node-retry but it is not going to be installed
   Depends: node-rimraf (>= 2.2.2) but it is not going to be installed
   Depends: node-semver (>= 2.1.0) but it is not going to be installed
   Depends: node-sha but it is not going to be installed
   Depends: node-slide but it is not going to be installed
   Depends: node-tar (>= 0.1.18) but it is not going to be installed
   Depends: node-which but it is not going to be installed
E: Unable to correct problems, you have held broken packages.

O que posso fazer para instalar e executar o npm corretamente?

Obrigado.

Zach Cook
fonte

Respostas:

29

Atualizar

Em relação ao comentário de William Entriken abaixo desta resposta, existe uma maneira melhor de instalar o Node.js nativamente no Ubuntu como um pacote instantâneo.

O Node.js está disponível como um pacote instantâneo em todas as versões atualmente suportadas do Ubuntu. Específicos do Node.js, os desenvolvedores podem escolher entre um ou mais dos lançamentos atualmente suportados e obter atualizações automáticas regulares diretamente do NodeSource. As versões 6, 8, 9, 10, 11, 12 e 13 do Node.js. estão disponíveis no momento, com o Snap Store sendo atualizado dentro de horas ou minutos após o lançamento do Node.js.

O nó pode ser instalado com um único comando, por exemplo:

sudo snap install node --classic --channel 9/stable 

O snap ao nó pode ser acessado pelo comando node, por exemplo:

$ node -v  
v9.9.0

Uma versão atualizada do npm será instalada como parte do snap ao nó. O npm deve ser executado fora do nó repl, em seu shell normal. Após instalar o snap do nó, execute o seguinte comando para ativar a verificação de atualização do npm:

sudo chown -R $ USER: $ (id -gn $ USER) / home / seu nome de usuário /.config

Substitua your-usernameno comando acima por seu próprio nome de usuário. Em seguida, execute npm -vpara verificar se a versão do npm está atualizada. Como exemplo, verifiquei se o npm estava atualizado, verifiquei a versão de um pacote já instalado chamado yarn com o comando npm list yarne atualizei o pacote yarn existente para a versão mais recente com o comandonpm update yarn

Os usuários podem alternar entre versões do Node.js a qualquer momento, sem a necessidade de envolver ferramentas adicionais como o nvm (Node Version Manager), por exemplo:

sudo snap refresh node --channel=8/stable

Os usuários podem testar versões de ponta do Node.js. que podem ser instaladas a partir do canal de ponta mais recente que atualmente está acompanhando a versão 12 do Node.js., alternando com:

sudo snap switch node --edge

Essa abordagem é recomendada apenas para usuários dispostos a participar de testes e relatórios de bugs a montante.


Resposta original

Para instalar as versões LTS mais recentes do Node.js (nodejs) e do Gerenciador de pacotes para o Node.js. (npm) em todas as versões atualmente suportadas do Ubuntu, abra o terminal e execute os seguintes comandos:

sudo apt-get remove nodejs npm ## remove existing nodejs and npm packages
sudo apt-get install curl  
curl -sL https://deb.nodesource.com/setup_6.x | sudo -E bash -
sudo apt-get install -y nodejs  

Se você estiver copiando esses três comandos, não negligencie o hífen no final do segundo comando.

O nodejspacote contém o nodejsbinário e npm, portanto, você não precisa instalar npmseparadamente. No entanto, para que alguns npmpacotes funcionem (como aqueles que exigem construção a partir do código-fonte), você precisará instalar o build-essentialpacote:

sudo apt-get install build-essential  

Plano LTS

Novos lançamentos semifinais do Node.js são cortados a mastercada seis meses. Novas versões com números pares (por exemplo, v6, v8, v10, etc.) são cortadas em abril. Novas versões com números ímpares (por exemplo, v5, v7, v9) são cortadas em outubro.

Quando uma nova versão principal com números ímpares é cortada, a versão principal anterior com números pares muda para o plano de Suporte a Longo Prazo.

Todas as versões principais cobertas pelo plano LTS serão ativamente mantidas por um período de 18 meses a partir da data em que entram na cobertura LTS. Após os 18 meses de suporte ativo, a versão principal passará para o modo "manutenção" por 12 meses adicionais.

instalação não LTS

Até março de 2017, os comandos para instalar a versão mais recente não-LTS do Node.js (v8 no momento da publicação) são os seguintes:

sudo apt-get remove nodejs npm ## remove existing nodejs and npm packages
sudo apt-get install curl  
curl -sL https://deb.nodesource.com/setup_8.x | sudo -E bash -
sudo apt-get install -y nodejs  

Programação LTS do Node.js

Liberar status do LTS Nome de código LTS Iniciar manutenção Iniciar manutenção Fim
6.x Boro ativo 2016-10-18 abril 2018 abril 2019
7.x sem LTS              
8.x Active Carbon 2017-10-31 abril 2019 dezembro 2019
9.x sem LTS              
10.x Dubnium ativo outubro 2018 abril 2020 abril 2021  
11.x Não LTS 2019-04-01 2019-06-30
12.x 2019-10-22 2021-04-01 2022-04-01
13.x Não LTS 2020-04-20 2020-06-01
karel
fonte
usando "sudo apt-get install nodejs -y" trabalharam para mim
Davinder Kumar
Esse método requer confiar em MUITAS partes e, em seguida, conceder acesso total ao seu computador ao deb.nodesource.com, uma entidade que nem se preocupa em atualizar o site em cada versão para incluir o hash de conteúdo para sua segurança. Não, obrigado!
William Entriken
O @WilliamEntriken Node.js agora é um pacote snap no Ubuntu que não requer a execução do curl -sL https://deb.nodesource.com/setup_6.x | sudo -E bash -comando. Em vez disso, o Node.js pode ser instalado como um pacote instantâneo. Adicionei uma nova seção Atualização à minha resposta, que contém as instruções para instalar o pacote de snap do Node.js.
karel