Menedżer pakietów węzłów został w jakiś sposób uszkodzony, teraz nie można go zainstalować

14

npm update -gWpadłem dzisiaj na problem, kiedy zdecydowałem się użyć w katalogu aplikacji nodejs. To była zła decyzja, ponieważ spowodowała, że ​​wpadłem na częsty i katastrofalny problem z npm .

Rozwiązaniem jest ponowna instalacja nodejs i npm. Niestety, kiedy idę zainstalować npm przy użyciu sudo apt-get install npmgo nie działa.

Pełny błąd w terminalu jest tutaj:

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.

Co mogę zrobić, aby poprawnie zainstalować i uruchomić npm?

Dzięki.

Zach Cook
źródło

Odpowiedzi:

29

Aktualizacja

Jeśli chodzi o komentarz Williama Entrikena poniżej tej odpowiedzi, istnieje lepszy sposób na zainstalowanie Node.js natywnie w Ubuntu jako pakiet przystawki.

Node.js jest dostępny jako pakiet przystawek we wszystkich obecnie obsługiwanych wersjach Ubuntu. W przypadku Node.js programiści mogą wybierać jedną lub więcej spośród obecnie obsługiwanych wersji i otrzymywać regularne automatyczne aktualizacje bezpośrednio z NodeSource. Wersje 6, 8, 9, 10, 11, 12 i 13 Node.js są obecnie dostępne, a Snap Store jest aktualizowany w ciągu kilku godzin lub minut od wydania Node.js.

Węzeł można zainstalować za pomocą jednego polecenia, na przykład:

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

Do przyciągania do węzła można uzyskać polecenie node, na przykład:

$ node -v  
v9.9.0

Zaktualizowana wersja npm zostanie zainstalowana jako część przystawki węzła. npm powinien być uruchamiany poza replikacją węzła, w normalnej powłoce. Po zainstalowaniu przystawki węzła uruchom następujące polecenie, aby włączyć sprawdzanie aktualizacji npm:

sudo chown -R $ USER: $ (id -gn $ USER) / home / twoja-nazwa użytkownika /.config

Zamień your-usernamepowyższe polecenie na własną nazwę użytkownika. Następnie uruchom, npm -vaby sprawdzić, czy wersja npm jest aktualna. Jako przykład sprawdziłem, czy npm jest aktualny, sprawdziłem wersję już zainstalowanego pakietu o nazwie przędza za pomocą polecenia, npm list yarna następnie zaktualizowałem istniejący pakiet przędzy do najnowszej wersji za pomocą polecenianpm update yarn

Użytkownicy mogą w dowolnym momencie przełączać się między wersjami Node.js bez konieczności angażowania dodatkowych narzędzi, takich jak nvm (Node Version Manager), na przykład:

sudo snap refresh node --channel=8/stable

Użytkownicy mogą testować najnowszą wersję Node.js, którą można zainstalować z najnowszego kanału brzegowego, który aktualnie śledzi Node.js w wersji 12, przełączając się za pomocą:

sudo snap switch node --edge

Takie podejście jest zalecane tylko tym użytkownikom, którzy są gotowi uczestniczyć w testowaniu i zgłaszaniu błędów na wcześniejszym etapie.


Oryginalna odpowiedź

Aby zainstalować najnowsze wersje LTS Node.js (nodejs) i Menedżera pakietów dla Node.js (npm) we wszystkich obecnie obsługiwanych wersjach Ubuntu, otwórz terminal i uruchom następujące polecenia:

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  

Jeśli kopiujesz te trzy polecenia, nie zaniedbuj łącznika na końcu drugiego polecenia.

nodejsPakiet ten zawiera nodejspliki binarne, a także npm, dzięki czemu nie trzeba instalować npmoddzielnie. Jednak aby niektóre npmpakiety działały (na przykład te, które wymagają budowania ze źródła), musisz zainstalować build-essentialpakiet:

sudo apt-get install build-essential  

Plan LTS

Nowe półprodukty Node.js są wycinane masterco sześć miesięcy. Nowe wersje parzyste (np. V6, v8, v10 itp.) Zostaną wydane w kwietniu. Nowe wersje nieparzyste (np. V5, v7, v9) zostaną wprowadzone w październiku.

Po odcięciu nowego głównego wydania nieparzystego, poprzednie główne wydanie parzyste przechodzi do planu wsparcia długoterminowego.

Każda ważna wersja objęta planem LTS będzie aktywnie utrzymywana przez okres 18 miesięcy od daty wejścia w zakres LTS. Po tych 18 miesiącach aktywnego wsparcia główna wersja przejdzie w tryb konserwacji przez 12 dodatkowych miesięcy.

instalacja inna niż LTS

Od marca 2017 r. Komendy instalacji najnowszej wersji Node.js (wersja 8 w chwili opublikowania) Node.js (nie w wersji LTS) są następujące:

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  

Node.js LTS Schedule

Zwolnij status LTS Nazwa kodowa LTS Rozpocznij konserwację Rozpocznij konserwację Zakończ konserwację
6.x Aktywny bor 2016-10-18 kwietnia 2018 kwietnia 2019
7.x Brak LTS              
8.x Active Carbon 2017-10-31 kwietnia 2019 grudnia 2019
9.x Brak LTS              
10.x Active Dubnium październik 2018 kwiecień 2020 kwiecień 2021  
11.x Brak LTS 2019-04-01 2019-06-30
12.x 2019-10-22 2021-04-01 2022-04-01
13.x Brak LTS 2020-04-20 2020-06-01
Karel
źródło
używanie „sudo apt-get install -y nodejs” działało dla mnie
Davinder Kumar
Ta metoda wymaga zaufania WIELU stronom, a następnie pełnego dostępu do komputera do deb.nodesource.com, podmiotu, który nie może nawet zadawać sobie trudu, aby aktualizować swoją witrynę internetową w każdej wersji w celu uwzględnienia skrótu zawartości dla własnego bezpieczeństwa. Nie, dziękuję!
William Entriken,
@WilliamEntriken Node.js jest teraz pakietem przystawek w Ubuntu, który nie wymaga uruchamiania curl -sL https://deb.nodesource.com/setup_6.x | sudo -E bash -polecenia. Zamiast tego Node.js można zainstalować jako pakiet przystawki. Dodałem nową sekcję Aktualizacja do mojej odpowiedzi, która zawiera instrukcje dotyczące instalowania pakietu Snap Node.js.
karel