wake-up-neo.net

Express.js: Keine solche Datei oder Verzeichnis

Ich habe Knoten mit apt-get install nodejs installiert. Dann habe ich npm mit apt-get install npm installiert. Jetzt, wenn ich versuche, express auszuführen, bekomme ich

$ express 
/usr/bin/env: node: No such file or directory

Wie löse ich diesen Fehler?

50
Evan Carroll

In Ubuntu gibt es zwei Pakete mit ähnlichen Namen, node und nodejs.

node macht das, 

Description-de: Programm "Amateur Packet Radio Node". Das Knotenprogramm akzeptiert TCP/IP- und Paketfunknetzwerkverbindungen und bietet Benutzern eine Schnittstelle, über die Gateway-Verbindungen zu entfernten Hosts unter Verwendung verschiedener Amateurfunkprotokolle hergestellt werden können.

nodejs macht das,

Description-de: Die ereignisbasierte serverseitige Javascript-Engine Node.js ähnelt im Design Systemen wie Rubys Event Machine oder Python's Twisted. Das Ereignismodell geht etwas weiter - es präsentiert die Ereignisschleife als Sprachkonstrukt statt als Bibliothek. Node.js enthält mehrere nützliche Bibliotheken, die Serveraufgaben erledigen: System, Ereignisse, Standard-E/A, Module, Zeitgeber, untergeordnete Prozesse, POSIX, HTTP, Multipart-Analyse, TCP, DNS, Assert, Pfad, URL, Abfragezeichenfolgen.

Fedora folgt ebenfalls einem ähnlichen Paketbenennungsschema. Aus diesem Grund musste die Binärdatei in nodejs von der ursprünglichen nodejs in node umbenannt werden. Dies ist jedoch nicht technisch koscher: Die meisten nodejs-Programme (und mit npm installierte Bibliotheken) gehen davon aus, dass der Knoten binär node ist. Wenn Sie dies umgehen möchten, können Sie die beiden am einfachsten miteinander verbinden. Wenn Sie diesen Weg einschlagen, installieren Sie nicht das Paket node, das das Amateur Packet Radio-Material behandelt.

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

Alternativ würde ich im Falle eines Knotens vorschlagen, n zu verwenden und node nicht zu installieren. Installieren Sie einfach npm (der Knoten wird installiert), entfernen Sie dann npm und weisen Sie apt an, es aufzuräumen. Dazu einfach laufen

Sudo apt-get install npm
Sudo npm install -g n
Sudo n latest
Sudo apt-get --purge remove npm
Sudo apt-get autoremove

Es gibt andere binäre Distro-Manager, die sogar von einem Shell-Skript wie nvm aus arbeiten, aber ich persönlich bevorzuge n. Stellen Sie sich n wie einen passenden für nur eine Sache vor: die Knoten-Binärdatei, die es in /usr/local/bin installiert.

Warum entfernen Sie npm? Waren nicht. apt-get --purge remove kann only jemals die vom Paketmanager installierten Elemente entfernen. n latest arbeitet außerhalb des Paketmanagers. Es gibt zwei NPMS, wenn Sie dies tun,

  1. version, die von der Distribution (Debian/Ubuntu) mit apt-get installiert wurde.
  2. version installiert von n latest.

Es macht keinen Sinn, die ältere Version der Distribution zu haben. Und was noch schlimmer ist: Wenn diese Version funktioniert, kann sie möglicherweise an einem anderen Ort installiert werden und Debian-Modifikationen enthalten, die Debian-Installationsverzeichnisse voraussetzen. Es ist besser, entweder/oder nicht beide zu verwenden.

106
Evan Carroll

sie sollten nodejs-legacy-Paket installieren, das eine Verknüpfung von/usr/bin/node nach/usr/bin/nodejs enthält

$ Sudo apt-get install nodejs-legacy

21
Sergey Fedoseev

In meinem Fall lag es daran, dass ich in meiner Umgebungsvariable PATH "~/progs/node/bin /" hatte und das "~" anscheinend nicht von env... aufgelöst wird, sondern durch den echten vollständigen Pfad ersetzt wird ("/ home/myuser/node/bin ") hat mein Problem gelöst.

4
Anthony O.

Diese Lösung 

export PATH="$HOME/opt/nodejs/bin:$PATH"

hat dieses Problem für mich gelöst (es sollte funktionieren, vorausgesetzt, die $ HOME-Variable ist richtig gesetzt). Dadurch kann ich auch vermeiden, den Pfad zu meinem Home-Verzeichnis hart zu codieren (z. B. um mein .bash_profile bei verschiedenen Konten/Servern wiederverwenden zu können).

2
SnapShot

mach das in cmd

Sudo apt-get install nodejs-legacy
chmod your folder 700 (optional)
0
Bilal Naqvi