it-swarm.com.de

Pakete können nicht mit dem Knotenpaket-Manager in Ubuntu installiert werden

Der Name des NodeJS-Interpreters (node) unter Ubuntu wurde aufgrund eines Namenskonflikts mit einem anderen Paket in nodejs umbenannt. Hier ist was die Readme. Debian sagt:

Der Upstream-Name für den Interpreter-Befehl Node.js lautet "node". In Debian wurde der Interpreter-Befehl in "nodejs" geändert.

Dies wurde durchgeführt, um eine Namespace-Kollision zu verhindern: Andere Befehle verwenden denselben Namen in ihrem Upstream, z. B. ax25-node aus dem Paket "node".

Skripte, die Node.js als Shell-Befehl aufrufen, müssen geändert werden, um stattdessen den Befehl "nodejs" zu verwenden.

Die Verwendung von nodejs bringt jedoch das Installieren von Paketen mit npm durcheinander. Die Paketinstallation schlägt mit dem folgenden Fehler fehl:

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

Wie kann ich npm verständlich machen, dass nodejs bereits auf dem System installiert ist, der Name des Interpreters sich jedoch unterscheidet?

488
Sayem

TL; DR:

Sudo apt-get install nodejs-legacy

Lassen Sie mich zunächst die Situation etwas klären. Im Sommer 2012 beschlossen Debian-Betreuer, Node.js ausführbares Programm umzubenennen, um eine Namensraum-Kollision mit einem anderen Paket zu verhindern. Es war eine sehr schwere Entscheidung für das Debian Technical Committee, weil es die Abwärtskompatibilität bricht.

Das Folgende ist ein Zitat aus dem Resolutionsentwurf des Ausschusses, der in der Debian-Mailingliste veröffentlicht wurde :

  1. Das nodejs-Paket muss so geändert werden, dass es/usr/bin/nodejs und nicht/usr/bin/node enthält. Das Paket sollte eine Breaks: Beziehung zu Paketen in Debian deklarieren, die auf/usr/bin/node verweisen.

  2. Das Quellpaket von nodejs enthält auch ein älteres Binärpaket von nodejs unter Priority: extra, das/usr/bin/node als Symlink zu/usr/bin/nodejs enthält. Kein Paket im Archiv kann von dem NodeJS-Legacy-Paket abhängen oder es empfehlen, das ausschließlich für den Upstream bereitgestellt wird
    Kompatibilität. Dieses deklarierte Paket muss auch eine Konfliktbeziehung zum Knotenpaket deklarieren.

<...>

Absatz 2 ist die eigentliche Lösung für das OP-Problem. OP sollte versuchen, dieses Paket zu installieren, anstatt Symlink manuell auszuführen. Hier ist ein Link zu diesem Paket auf der Debian-Paketindex-Website .

Es kann mit Sudo apt-get install nodejs-legacy installiert werden.

Ich habe keine Informationen über die Übernahme der ganzen Sache durch NPM-Entwickler gefunden, aber ich denke, dass das Paket npm irgendwann repariert wird und nodejs-legacy wirklich zum Vermächtnis wird.

1084
vbo

Versuchen Sie, Knoten mit Knoten js zu verknüpfen. Finden Sie zuerst heraus, wo sich nodejs befindet

whereis nodejs

Dann Softlink von Knoten zu Knoten

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

Ich gehe davon aus, dass sich/usr/bin in Ihrem Ausführungspfad befindet. Dann können Sie testen, indem Sie node oder npm in Ihre Befehlszeile eingeben, und alles sollte jetzt funktionieren.

110
leorex

Sie können Nodejs auch mit NVM oder Nodejs Version Manager installieren. Es gibt viele - Vorteile zur Verwendung eines Versionsmanagers. Eine davon ist, dass Sie sich um dieses Problem keine Sorgen machen müssen.


Anleitung:


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

Sobald die vorausgesetzten Pakete installiert sind, können Sie das nvm-Installationsskript von der GitHub-Seite des Projekts herunterladen. Die Versionsnummer kann unterschiedlich sein, aber im Allgemeinen können Sie sie mit der folgenden Syntax herunterladen und installieren:

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

Dadurch wird das Skript heruntergeladen und ausgeführt. Die Software wird in einem Unterverzeichnis Ihres Home-Verzeichnisses unter ~/.nvm installiert. Außerdem werden die erforderlichen Zeilen zu Ihrer ~/.profile -Datei hinzugefügt, um die Datei zu verwenden.

Um Zugriff auf die NVM-Funktionalität zu erhalten, müssen Sie sich abmelden und erneut anmelden. Alternativ können Sie die Datei ~/.profile als Quelle verwenden, damit Ihre aktuelle Sitzung über die Änderungen informiert ist:

source ~/.profile

Nachdem Sie nvm installiert haben, können Sie isolierte Node.js-Versionen installieren.

Um herauszufinden, welche Versionen von Node.js für die Installation verfügbar sind, können Sie Folgendes eingeben:

nvm ls-remote
. . .

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

Wie Sie sehen können, ist die neueste Version zum Zeitpunkt des Schreibens v0.11.14. Sie können das installieren, indem Sie Folgendes eingeben:

nvm install 0.11.14

Normalerweise wechselt nvm zur zuletzt installierten Version. Sie können nvm explizit anweisen, die gerade heruntergeladene Version zu verwenden, indem Sie Folgendes eingeben:

nvm use 0.11.14

Wenn Sie Node.js mit nvm installieren, heißt die ausführbare Datei node. Sie können die aktuell von der Shell verwendete Version anzeigen, indem Sie Folgendes eingeben:

node -v

Das vollständige Tutorial finden Sie hier

42
Eduardo Dennis
  1. Installieren Sie nvm zuerst mit:

    curl https://raw.githubusercontent.com/creationix/nvm/v0.11.1/install.sh | bash
    
  2. Führen Sie den Befehl aus

    source ~/.profile
    
  3. Nun führe dies aus und es werden alle installierten oder andere Versionen von Paketen angezeigt:

    nvm ls-remote
    
  4. Installierte Pakete werden grün angezeigt. Installieren Sie die gewünschte Version:

    nvm install 6.0.0
    
  5. Überprüfen Sie, wo nicht installiert ist:

    which node
    
  6. Aktuelle Version prüfen:

    node -v
    
    n=$(which node);
    n=${n%/bin/node}; 
    chmod -R 755 $n/bin/*; 
    Sudo cp -r $n/{bin,lib,share} /usr/local
    
17
Ritesh
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

Kombiniert die akzeptierte Antwort mit source ~/.profile aus dem gefalteten Kommentar und einigen Bereinigungsbefehlen zuvor. Höchstwahrscheinlich müssen Sie danach auch Sudo apt-get install npm.

für mich wurde das problem gelöst durch,

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 [email protected] || Sudo npm install -g [email protected]
11
shrishinde

Hier ist ein weiterer Ansatz, den ich verwende, da ich n zum einfachen Umschalten zwischen Knotenversionen mag.

Installieren Sie auf einem neuen Ubuntu-System zuerst den Knoten 'system':

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

Dann installieren Sie n Module global:

npm install -g n

Da der Systemknoten zuerst installiert wurde (siehe oben), kann das alternative System verwendet werden, um sauber auf den durch n bereitgestellten Knoten zu verweisen. Stellen Sie zunächst sicher, dass das alternative System nichts für den Knoten hat:

update-alternatives --remove-all node

Fügen Sie dann den von n bereitgestellten Knoten hinzu:

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

Fügen Sie als Nächstes den vom System bereitgestellten Knoten hinzu (den Knoten, der mit curl installiert wurde):

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

Wählen Sie nun den von n bereitgestellten Knoten über das interaktive Menü aus (wählen Sie /usr/local/bin/node aus dem Menü, das durch den folgenden Befehl angezeigt wird):

update-alternatives --config node

Da /usr/local/bin in der Regel eine höhere Priorität in PATH hat als /usr/bin, muss der folgende Alias ​​erstellt werden (in Ihrem .bashrc oder .zshrc eingeben), damit der alternative Systemknoten wirksam wird. Andernfalls hat der mit n in/usr/local/bin installierte Knoten immer Vorrang:

alias node='/usr/bin/node'

Jetzt können Sie mit n <desired node version number> einfach zwischen Knotenversionen wechseln.

9
Ville

Wie andere Leute bereits erwähnt haben, werde ich vorschlagen, "Sudo apt-get" nicht zu verwenden, um Node oder eine Entwicklungsbibliothek zu installieren. Sie können die erforderliche Version von https://nodejs.org/dist/v6.9.2/ herunterladen und Ihre eigene Umgebung einrichten.

Ich werde Tools wie nvm und n empfehlen, um Ihre Knotenversion zu verwalten. Es ist sehr bequem, mit diesen Modulen zu wechseln und zu arbeiten. https://github.com/creationix/nvmhttps://github.com/tj/n

Oder schreiben Sie eine einfache Bash, um Zip/tar herunterzuladen, den Ordner zu extrahieren und einen Softlink zu erstellen. Zeigen Sie bei jedem Update einfach mit dem alten Softlink auf die neu heruntergeladene Version. Wie ich es für mich selbst erstellt habe, können Sie sich beziehen: 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
8
xdeepakv

Unter Linux Mint 17 habe ich beide Lösungen (Erstellen eines Symlinks oder Verwenden des Pakets nodejs-legacy) ohne Erfolg ausprobiert.

Das Einzige, was mir endlich geholfen hat, war die Verwendung des ppa von Chris Lea:

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

Diese installierte Node Version 10.37 und npm 1.4.28. Danach konnte ich Pakete global installieren.

8
Suzana

Einfache Lösung von hier

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

Sie können die Version angeben, indem Sie den Wert für setup_x.x ändern, z. B. in setup_5.x

5

Ihr System kann den Pfadknoten js binary nicht erkennen.

1. welcher Knoten

2.Dann Softlink-Knoten zu Knoten js

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

Ich gehe davon aus, dass sich/usr/bin in Ihrem Ausführungspfad befindet. Dann können Sie testen, indem Sie node oder npm in Ihre Befehlszeile eingeben, und alles sollte jetzt funktionieren.

4
frostcs

Deinstallieren Sie die von Ihnen verwendete Knotenversion

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

installieren Sie nvm (Node Version Manager) https://github.com/creationix/nvm

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

Jetzt können Sie die gewünschte Version des Knotens installieren und zwischen den Versionen wechseln.

4

Ich habe die Verknüpfung von/usr/sbin/node (der mit dem Paket ax25-node verknüpft ist) aufgehoben und dann über diese Befehlszeile eine Verknüpfung zu nodejs erstellt

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

Da Pakete wie Karma nicht mit NodeJS-Namen funktionieren, die erste Zeile des Karma-Skripts jedoch von Node zu NodeJS geändert wird, bevorzuge ich es, dieses Problem ein für alle Mal zu beheben

Dies ist der Fall, wenn Ihr Knoten nicht ordnungsgemäß installiert wurde. Zuerst müssen Sie den Knoten deinstallieren und dann erneut installieren. Zur Installation des Knotens kann dies hilfreich sein http://array151.com/blog/nodejs-tutorial-and-set-up/

danach können Sie die Pakete einfach installieren. Dies kann Ihnen bei der Installation der Pakete helfen

http://array151.com/blog/npm-node-package-manager/

1
Dinesh Jain

Problem ist nicht im Installer
Ersetzen Sie nodejs durch node oder ändern Sie den Pfad von/usr/bin/nodejs zu/usr/bin/node

1
Vinayk93

Für mich war der Fix das Entfernen der Node * -Pakete und auch der Npm-Pakete.

Dann eine Neuinstallation als:

Sudo apt-get install autoclean
Sudo apt-get install nodejs-legacy
npm install
1
Jimmy

sie können einen Linkknoten ln -s nodejs in /usr/bin erstellen und hoffen, dass dies Ihr Problem löst.

0
Nitish Agarwal