Ubuntu'da düğüm paket yöneticisi kullanılarak paketler yüklenemiyor


500

Ubuntu'daki NodeJS yorumlayıcı adı ( node), nodejsbaşka bir paketle ad çakışması nedeniyle yeniden adlandırıldı . İşte benioku. Debian diyor ki:

Node.js yorumlayıcı komutunun akış yukarı adı "düğüm" dür. Debian'da tercüman komutu "nodejs" olarak değiştirildi.

Bu, bir ad alanı çarpışmasını önlemek için yapıldı: diğer komutlar akışlarında "düğüm" paketinden ax25-node gibi aynı adı kullanır.

Kabuk komutu olarak Node.js'yi çağıran komut dosyalarının yerine "nodejs" komutunu kullanması gerekir.

Ancak, nodejs kullanmak paketleri kullanarak paketleri yükler npm. Paket kurulumu aşağıdaki hatayla başarısız oluyor:

sh: 1: node: not found
npm WARN This failure might be due to the use of legacy binary "node"
npm WARN For further explanations, please read /usr/share/doc/nodejs/README.Debian

Npm'nin nodejs'lerin sistemde zaten kurulu olduğunu ancak yorumlayıcı adının farklı olduğunu nasıl anlamasını sağlarım?


29
Sen deneyebilirsiniz ln -s nodejs nodeiçinde /usr/bin. Yine de bir tür hack.
vbo

1
@vbo bir cevap olarak ekleyebilirsiniz - bu sorunu çözmek!
Himel Nag Rana

2
@HimelNagRana ​​Başka bir (daha iyi, kabul edilmiş) cevabım var. İlk yorumum da cevaba dönüştürüldü ( stackoverflow.com/a/21168305/539686 ).
vbo

4
NVM'yi Node.js sürümlerini yüklemek ve yönetmek için kullanın, github.com/creationix/nvm , kolay ve kullanışlı!
Unitech

2
Bu çözümü şiddetle tavsiye ederim: düğüm ve npm sürümlerinin kontrolünü her zaman ve her kullanım için kontrol etmek için stackoverflow.com/a/38325376/3197383 .
Rémi Becheras

Yanıtlar:


1094

TL; DR:

sudo apt-get install nodejs-legacy

Öncelikle durumu biraz açıklığa kavuşturayım. 2012 yazında Debian koruyucular, başka bir paketle bir tür ad alanı çarpışmasını önlemek için Node.js yürütülebilir dosyasını yeniden adlandırmaya karar verdiler. Debian Teknik Komitesi için çok zor bir karardı, çünkü geriye dönük uyumluluğu bozdu.

Debian posta listesinde yayınlanan Komite karar taslağından alıntı :

  1. Düğümler paketi, / usr / bin / node değil, / usr / bin / nodejs sağlayacak şekilde değiştirilir. Paket, Debian'da / usr / bin / node komutuna başvuran tüm paketlerle bir Breaks: ilişkiyi bildirmelidir.

  2. Ayrıca, nodejs kaynak paketi Priority'de bir nodejs-legacy ikili paketi sağlayacaktır: extra / usr / bin / nodejs için bir sembolik bağlantı olarak / usr / bin / node içerir. Arşivdeki hiçbir paket, yalnızca yukarı akış
    uyumluluğu için sağlanan nodejs-legacy paketine bağlı olamaz veya bunu öneremez . Bu paket ayrıca, düğüm paketiyle bir Çakışma: ilişki bildireceğini beyan eder.

<...>

Paragraf 2 OP'nin sorunu için asıl çözümdür. OP, el ile symlink yapmak yerine bu paketi yüklemeye çalışmalıdır. Debian paket dizini web sitesinde bu paketin bağlantısı .

Kullanılarak kurulabilir sudo apt-get install nodejs-legacy.

NPM geliştiricileri tarafından her şeyi benimsemeyle ilgili herhangi bir bilgi bulamadım, ancak npmpaketin bir noktada düzeltileceğini ve nodejs-legacygerçekten miras olacağını düşünüyorum .


106
Özetlemek gerekirse:sudo apt-get install nodejs-legacy
Alf Eaton

58
Sadece körü körüne icra etmek için bir emir vermek yerine durumu iyice açıklayan cevapları severim. Sonra bu bilgileri, ortam kurulum komut dosyasındaki yorumlara kopyalayabilirim, böylece çalışmadığı zaman bir yıl sonra neler olduğunu biliyorum.
Mnebuerquo

29
Bir kişi olarak düğümün düğüm değil, sadece Debian'da düğüm olduğunu inanılmaz derecede rahatsız edici buluyorum. Bunun gibi geliştirme araçlarını parçalamak gerçekten, gerçekten, gerçekten şaşırtıcı derecede aptalca. Temel olarak, bu karar HER NODEJS PAKETİNDE Debian için istisnai bir durum yarattı! "Düğüm" ün başka ne yaptığını hiç duymadım, bu yüzden herhangi bir sempati duymuyorum; (
Lodewijk

4
Bir şeyi kaçırmadıkça, bu bir uzay çarpışması değildi. İsim alanı yok , basit bir isimdi çarpışmasıydı. Ad alanları , her biri farklı bir ad alanında bulunduğu sürece aynı ada iki kez (veya daha fazla) sahip olmanızı sağlar . Linux veya Unix'te yürütülebilir adlar için böyle bir "boşluk" yoktur. En yakın şey, $ PATH değişkeninizde birden çok dizin olabilmeniz ve yürütülebilir adlı bir eşleşmeye sahip en eski dizinlerin kullanılmasıdır. (Ama bu bir ad alanından gerçekten çok farklı.)
iconoclast

7
Bu çok daha can sıkıcı bir durum, çünkü isim çatışması bir "Amatör Paket Radyosu" ile oldu .
Suzana

113

Düğümü düğüme bağlamayı deneyin. İlk önce nodejs'un nerede olduğunu bulun

whereis nodejs

Ardından düğümleri düğümlere yumuşak bağlantı

ln -s [the path of nodejs] /usr/bin/node 

/ Usr / bin komutunun yürütme yolunuzda olduğunu varsayıyorum. Ardından komut satırınıza düğüm veya npm yazarak test edebilirsiniz ve her şey şimdi çalışmalıdır.


3
-s, sabit bağlantı değil, sembolik bağlantı (genellikle tercih edilen seçenek) oluşturur.
hyde

20
Bu işe yarıyor, ancak vbo'nunnodejs-legacy paketi kurmaya cevabı daha kolay.
Don Kirkby

2
Don Kirkby'nin ve vbo'nun cevabını ikinci olarak verdim. Bence vbo'nun cevabı seçilen cevap olmalı.
Modulitos

3
Ben aynı yazılımı iki kez yüklemek yerine sadece bir sembolik bağlantı oluşturmak için çok daha uygun buluyorum ....
frankies

7
Hayır değil gübre ile Do /usr/binsen olmadıkça dpkg. Uygun çözüm (bu manuel symlinking yaklaşımını beğendiyseniz), yerel yüklemeler ve geçersiz kılmalar için tasarlanmış symlink'i oluşturmaktır/usr/local/bin . Manuel olarak yaptığınız her şey /usr/binpaket yöneticisi tarafından üzerine yazılabilir ve yazılabilir ve / veya karıştırılacaktır.
tripleee

44

Nodejs'i NVM veya Nodejs Sürüm Yöneticisi'ni kullanarak da yükleyebilirsiniz Bir sürüm yöneticisi kullanmanın birçok avantajı vardır . Bunlardan biri, bu sorun hakkında endişelenmenize gerek yok.


Talimatlar:


sudo apt-get update
sudo apt-get install build-essential libssl-dev

Önkoşul paketleri yüklendikten sonra, projenin GitHub sayfasından nvm kurulum komut dosyasını aşağı çekebilirsiniz. Sürüm numarası farklı olabilir, ancak genel olarak, aşağıdaki sözdizimiyle indirip yükleyebilirsiniz:

curl https://raw.githubusercontent.com/creationix/nvm/v0.16.1/install.sh | sh

Bu komut dosyasını indirir ve çalıştırır. Yazılımı, adresindeki ana dizininizin bir alt dizinine yükleyecektir ~/.nvm. Ayrıca,~/.profile dosyayı kullanmak için dosyanıza ekler.

NVM işlevselliğine erişmek için oturumu kapatıp tekrar oturum açmanız gerekir veya ~ / .profile dosyasını kaynak olarak mevcut oturumunuzun değişiklikleri bilmesini sağlayabilirsiniz:

source ~/.profile

Artık nvm yüklüyse, izole Node.js sürümlerini yükleyebilirsiniz.

Yüklemeye hazır Node.js sürümlerini bulmak için aşağıdakileri yazabilirsiniz:

nvm ls-remote
. . .

v0.11.10
v0.11.11
v0.11.12
v0.11.13
v0.11.14

Gördüğünüz gibi, bu yazıdaki en yeni sürüm v0.11.14'tür. Bunu aşağıdakileri yazarak yükleyebilirsiniz:

nvm install 0.11.14

Genellikle, nvm en son yüklenen sürümü kullanmaya geçer. Nvm'ye kısa bir süre önce indirdiğimiz sürümü kullanmasını söyleyebilirsiniz:

nvm use 0.11.14

Nov.js'yi nvm kullanarak yüklediğinizde, yürütülebilir dosya düğüm olarak adlandırılır. Şu anda kabuk tarafından kullanılmakta olan sürümü yazarak görebilirsiniz:

node -v

Comeplete öğreticisini burada bulabilirsiniz


3
Bu da benim için yukarıdaki hatayı düzeltti. Nodejs geliştiricisi için çok daha iyidir (bence tüm geliştiriciler, ben nodejs'da çalışan biri değilim). Ben kullandım.
Ajeeb.KP

1
Ben nvm düğüm yumuşak bağlantı gerekiyordu usr/bin/node. Çok koştusudo ln -s /home/www/.nvm/v0.10.36/bin/node /usr/bin/node
Jason Kim

2
Saatlerdir anlamaya çalışıyorum .. Bu işe yaradığım tek çözüm. Teşekkür ederim.
w3bMak3r

'yararları' şimdi ölü link
gezintiniz

20
  1. nvmİlk önce aşağıdakileri kullanarak yükleyin :

    curl https://raw.githubusercontent.com/creationix/nvm/v0.11.1/install.sh | bash
  2. Komutu çalıştır

    source ~/.profile
  3. Şimdi bunu çalıştırın ve bu tüm kurulu veya diğer paket sürümlerini gösterecektir:

    nvm ls-remote
  4. Yüklü paketler yeşil renkte olacaktır. İstediğiniz sürümü yükleyin:

    nvm install 6.0.0
  5. Kurulu olmayan yerleri kontrol edin:

    which node
  6. Mevcut sürümü kontrol et:

    node -v
    
    n=$(which node);
    n=${n%/bin/node}; 
    chmod -R 755 $n/bin/*; 
    sudo cp -r $n/{bin,lib,share} /usr/local

2
Düğüm ve npm sürümlerinin herhangi bir zamanda ve herhangi bir kullanım için kontrolünü almak için bu çözümü şiddetle tavsiye ederim.
Rémi Becheras

14
sudo apt-get --purge remove node
sudo apt-get --purge remove nodejs-legacy
sudo apt-get --purge remove nodejs

sudo apt-get install nodejs-legacy
source ~/.profile

Kabul edilen cevabı source ~/.profilekatlanmış yorum ve daha önce bazı temizleme komutlarıyla birleştirdi. Büyük olasılıkla sudo apt-get install npmpeşinden gitmen gerekecek .


12

benim için sorun çözüldü,

sudo apt-get remove node
sudo apt-get remove nodejs
curl -sL https://deb.nodesource.com/setup_8.x | sudo -E bash -
sudo apt-get install -y nodejs
sudo ln -s /usr/bin/nodejs /usr/bin/node
alias node=nodejs
rm -r /usr/local/lib/python2.7/dist-packages/localstack/node_modules
npm install -g npm@latest || sudo npm install -g npm@latest

10

İşte n'yi sevdiğim için kullandığım başka bir yaklaşımDüğüm sürümleri arasında kolay geçiş için .

Yeni bir Ubuntu sisteminde, önce 'sistem' düğümünü kurun:

curl -sL https://deb.nodesource.com/setup | sudo bash -

Sonra n modülünü global olarak kurun :

npm install -g n

Sistem düğümü ilk olarak kurulduğundan (yukarıda), alternatif sistem n tarafından sağlanan düğüme temiz bir şekilde işaret etmek için kullanılabilir . Öncelikle alternatifler sisteminin düğüm için hiçbir şeye sahip olmadığından emin olun:

update-alternatives --remove-all node

Sonra n tarafından sağlanan düğümü ekleyin :

update-alternatives --install /usr/bin/node node /usr/local/bin/node 1

Sistem tarafından sağlanan bir sonraki düğüm ekle (curl ile kurulan düğüm):

update-alternatives --install /usr/bin/node node /usr/bin/nodejs 2

Şimdi etkileşimli menüyü kullanarak n tarafından sağlanan düğümü seçin ( /usr/local/bin/nodeaşağıdaki komutla sunulan menüden seçin ):

update-alternatives --config node

Son olarak, PATH'de /usr/local/bingenellikle önceliğe göre daha yüksek önceliğe sahip /usr/binolduğundan, alternatif sistem düğümünün etkili olması için aşağıdaki takma adın (.bashrc veya .zshrc'ye girin) oluşturulması gerekir; aksi halde / usr / local / bin içinde n ile kurulan düğüm her zaman önceliklidir:

alias node='/usr/bin/node'

Şimdi ile düğüm sürümleri arasında kolayca geçiş yapabilirsiniz n <desired node version number>.


9

Linux Mint 17'de, her iki çözümü de denedim (bir symlink oluşturma veya nodejs-legacypaketi kullanma ).

Sonunda benim için işe yarayan tek şey Chris Lea'dan ppa kullanmaktı:

sudo apt-get purge node-*
sudo apt-get autoremove 
sudo add-apt-repository ppa:chris-lea/node.js
sudo apt-get update
sudo apt-get install nodejs

Bu yüklü düğüm sürümü 10.37 ve npm 1.4.28. Bundan sonra, paketleri global olarak yükleyebilirim.


9

Diğer milletlerin de belirttiği gibi, düğüm veya herhangi bir geliştirme kütüphanesi kurmak için "sudo apt-get" kullanılmamasını önereceğim. Gerekli sürümü https://nodejs.org/dist/v6.9.2/ adresinden indirebilirsiniz. ve kendi ortamınızı .

Düğüm sürümünü yönetmek için nvm ve n gibi araçlar önereceğim . Bu modülleri değiştirmek ve onlarla çalışmak çok uygundur. https://github.com/creationix/nvm https://github.com/tj/n

Veya zip / tar indirmek için temel bash yazın, taşıma klasörü ayıklayın ve yumuşak bir bağlantı oluşturun. Güncellemeniz gerektiğinde, eski yumuşak bağlantıyı indirilen yeni sürüme yönlendirmeniz yeterlidir. Kendi için oluşturduğum gibi, başvurabilirsiniz: https://github.com/deepakshrma/NodeJs-4.0-Reference-Guide/blob/master/nodejs-installer.sh

#Go to home
cd ~
#run command
#New Script
wget https://raw.githubusercontent.com/deepakshrma/NodeJs-4.0-Reference-Guide/master/nodejs-installer.sh 
bash nodejs-installer.sh -v lts
#here -v or --version can be sepecific to 0.10.37 or it could be latest/lts 
#Examples
bash nodejs-installer.sh -v lts
bash nodejs-installer.sh -v latest
bash nodejs-installer.sh -v 4.4.2

6

Buradan basit çözüm

curl -sL https://deb.nodesource.com/setup_7.x | sudo -E bash --
sudo apt-get install nodejs

Sürümü setup_x.x değerini değiştirerek belirtebilirsiniz, örneğin setup_5.x


5

Sisteminiz js ikili yol düğümünü algılayamıyor.

1. hangi düğüm

2. daha sonra yumuşak bağlantı düğümü düğümleri

ln -s [the path of nodejs] /usr/bin/node 

/ Usr / bin komutunun yürütme yolunuzda olduğunu varsayıyorum. Ardından komut satırınıza düğüm veya npm yazarak test edebilirsiniz ve her şey şimdi çalışmalıdır.


4

Sahip olduğunuz düğüm sürümünü kaldırın

sudo apt-get --purge remove node
sudo apt-get --purge remove nodejs-legacy
sudo apt-get --purge remove nodejs

nvm'yi yükle (Düğüm Sürümü Yöneticisi) https://github.com/creationix/nvm

wget -qO- https://raw.githubusercontent.com/creationix/nvm/v0.31.0/install.sh | bash

Artık istediğiniz düğüm sürümünü yükleyebilir ve sürümler arasında geçiş yapabilirsiniz.


FYI - yukarıdaki yöntemi kullanan herkes nvm, nodejs-legacy paketinin v0.10.25 olduğunu unutmayın. (ya da en azından denediğimde gördüm.)
JaredH

2

/ Usr / sbin / node (ax25-node paketi ile bağlantılı) bağlantısını çözdüm, sonra komut satırında bunu kullanarak nodejs için bir bağlantı oluşturduk

sudo ln -s /usr/bin/nodejs /usr/bin/node

Karma gibi paket nodejs adıyla çalışmadığından, ancak karma komut dosyasının ilk satırını düğümden düğümlere değiştirdiğinden, bu sorunu bir kez ve herkes için çözmeyi tercih ederim


1

Benim için düzeltme düğüm * paketleri ve ayrıca npm paketleri kaldırıyordu.

Sonra yeni bir kurulum olarak:

sudo apt-get install autoclean
sudo apt-get install nodejs-legacy
npm install

sudo apt-get autoclean"aynı" dahasudo apt-get install autoclean
m3nda

1

Sorun yükleyicide değil
düğüm ile düğüm değiştir veya / usr / bin / nodejs yerine / usr / bin / node yolunu değiştir



0

bunun sorununuzu çözeceğini umduğunuz bir bağlantı ln -s nodejsdüğümü oluşturabilirsiniz /usr/bin.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.