Globale Knotenmodule werden nicht korrekt installiert. Befehl nicht gefunden

80

Ich habe ein Problem bei der Installation globaler Knotenmodule und alles, was ich online finde, besagt, dass die Lösung nur -g hinzufügt. Welches ist nicht das Problem. Ich glaube, es ist ein Verknüpfungsproblem oder ein falsches Verzeichnisproblem.

Folgendes mache ich:

$ npm install -g express
npm http GET https://registry.npmjs.org/express
npm http 304 https://registry.npmjs.org/express
npm http GET https://registry.npmjs.org/range-parser/0.0.4
npm http GET https://registry.npmjs.org/mkdirp/0.3.3
...downloads correctly

$ express myapp
bash: express: command not found

Wenn ich jedoch den direkten Linkspeicherort ausführe, um ihn auszudrücken, funktioniert er:

   $ /usr/local/share/npm/bin/express myapp

   create : myapp
   create : myapp/package.json
   create : myapp/app.js
... Builds app correctly

Wo sich das Modul befindet:

$ which node
/usr/local/bin/node
$ node -pe process.execPath
/usr/local/Cellar/node/0.8.20/bin/node
$ npm link express
/Users/bentonrr/Development/Personal/node_modules/express -> /usr/local/share/npm/lib/node_modules/express

In meinem .bash_profile habe ich:

export PATH=/usr/local/bin:$PATH
export NODE_PATH=/usr/local/lib/node_modules:/usr/local/lib/node

Muss ich meine Knotenumgebung ändern, um sie in den richtigen Ordner herunterzuladen? Ist etwas nicht richtig verlinkt? Ich bin verloren..

Vielen Dank!

Andere Spezifikationen:

$ node --version
v0.8.20
$ npm --version
1.2.11
$ brew --version
0.9.4
OSX Version 10.8.2
im_benton
quelle
1
Dies liegt daran, dass / usr / local / share / npm / bin / nicht in Ihrem $ PATH Ihrer Shell enthalten ist. Deshalb kann die Shell nicht finden express.
JP Richardson
2
Ich habe hinzugefügt: export PATH = / usr / local / share / npm / bin: $ PATH zu meinem .bash_profile und es hat funktioniert. Vielen Dank! Fügen Sie eine Antwort hinzu, damit ich sie akzeptieren und positiv bewerten kann.
im_benton
In meinem Fall, wenn NPM auch über Cellar unter OSX bininstalliert ist, lautet mein Pfad, den ich in .bash_profile festgelegt habe:export PATH=$PATH:/usr/local/Cellar/node/10.5.0/bin
Shane

Antworten:

61

Fügen Sie /usr/local/share/npm/binIhrem PATH(z .bashrc. B. in ) hinzu.

Weitere Informationen finden Sie unter npm help npm:

globaler Modus: npm installiert Pakete in das Installationspräfix unter Präfix / lib / node_modules und Bins werden in Präfix / bin installiert.

Sie finden das Installationspräfix mit npm get prefixoder npm config list | grep prefix.

Tim Smith
quelle
Was ist mit Nicht- $HOME/.npmSudo mit nvm? Sollte der Pfad nicht zum .bash_profile oder .bashrc sein? Ich benutze nvm, also möchte ich sicherstellen, dass ich die Dinge nicht überkreuze.
Blamb
135

Dies kann bedeuten, dass Ihr Knoteninstallationspräfix nicht Ihren Erwartungen entspricht.

Sie können es so einstellen:

npm config set prefix /usr/local

Versuchen Sie dann npm install -gerneut zu laufen , und es sollte funktionieren. Hat für mich auf einem Mac gearbeitet und die Lösung kommt von dieser Seite:

http://webbb.be/blog/command-not-found-node-npm/

BEARBEITEN: Beachten Sie, dass ich auf einem neuen Mac, den ich gerade einrichte, gerade wieder darauf gestoßen bin und den hier beschriebenen Prozess auch im Stackoverflow ausführen musste .

Brad Parks
quelle
Ich verwende nodenvund es gibt höchstwahrscheinlich einen besseren Weg, um dieses Problem für meinen Fall zu lösen. Ihre Lösung funktionierte jedoch als schnelle und schmutzige Lösung! Ich habe dann das Präfix wieder auf das nodenvPräfix umgestellt und konnte das Paket von der ausführen /usr/local path. Vielen Dank!
Garrett Tacoronte
3
Ich habe Monate damit verbracht, dies zu beheben, und dies ist die einzige Antwort, die ich gesehen habe, die es für mich behoben hat! Vielen herzlichen Dank.
Azz0r
Bei mir funktioniert es immer noch nicht. Was kann ich tun? Ich möchte global Typoskript auf Win7 installieren.
Artimal
1
Ich habe viele Lösungen ausprobiert, aber nur diese hat es für mich getan. Aus irgendeinem Grund wurde mein Präfix auf gesetzt, /Users/(username)/.npm-globalobwohl ich alles neu installiert habe. Ich bin auch auf einem Mac
Castilho
Dies wird Sie beschädigen, wenn Sie Node via Cellar installiert haben.
Shane
11

Mein npm konnte auch keine globalen Pakete finden. Ich habe getan, was Brad Parks vorgeschlagen hat:

npm config set prefix /usr/local

Dann habe ich einen EACCES-Berechtigungsfehler erhalten (NICHT VERWENDEN sudo npm install -g <package>) und ihn über die offiziellen npm-Dokumente behoben: https://docs.npmjs.com/resolving-eacces-permissions-errors-when-installing-packages-globally

  1. Erstellen Sie in der Befehlszeile in Ihrem Ausgangsverzeichnis ein Verzeichnis für globale Installationen:
 mkdir ~/.npm-global
  1. Konfigurieren Sie npm für die Verwendung des neuen Verzeichnispfads:
 npm config set prefix '~/.npm-global'
  1. Öffnen oder erstellen Sie in Ihrem bevorzugten Texteditor eine ~ / .profile-Datei und fügen Sie diese Zeile hinzu:
 export PATH=~/.npm-global/bin:$PATH
  1. Aktualisieren Sie in der Befehlszeile Ihre Systemvariablen:
 source ~/.profile
  1. Dann installieren Sie ein Paket global und testen Sie es! Zum Beispiel:
npm install -g awsmobile-cli
awsmobile configure

Vicente
quelle
Hallo allerseits, ich habe eine Frage. Nach Schritt 2 finde ich bin / in ~ / .npm-global nicht mehr . Also, es funktioniert nicht, oder?
AquariusPotter
Es sollte immer noch funktionieren. Vergessen Sie nicht, dass sich diese export PATH=~/.npm-global/bin:$PATHZeile in der Datei ~ / .profile befindet . Sie erhalten einen Fehler?
Vicente
6

In meinem Fall war die Umgebungsvariable NODE_PATH leer. Überprüfen Sie, ob es leer ist.

echo $NODE_PATH

wenn der NODE_PATH leer ist. Ändern Sie dann ~ / .bash_profile und fügen Sie NODE_PATH hinzu

nano ~/.bash_profile
export NODE_PATH=`npm root -g`
source ~/.bash_profile

Installieren Sie nun die npm-Module erneut und prüfen Sie, ob diese im Pfad installiert sind npm root -g

faulerTank
quelle
Dies! ist mein Problem bei der Verwendung von NVM und die Repls müssen nach globalen Paketen unter Linux / Fedora suchen
Ray Foss
4

Ich installiere niemals npm-Sachen über sudo! Ich habe meine eigenen Gründe, aber ich versuche nur, die Dinge einfach und benutzerbasiert zu halten, da dies eine Welt der Benutzerentwicklung ist und nicht jeder über Root-Zugriff verfügt und die Installation von Root / Sudo-Dingen wie diesen nur die Dinge zu Beginn durcheinander bringt mit. Schließlich sollten alle Entwickler in der Lage sein, diese Anweisungen zu befolgen, nicht nur privilegierte Sudo-Benutzer.

Dieses spezielle System ist ein RHEL7, auf das über SSH zugegriffen wird:

Häufig benötigt man verschiedene Versionen von Node, daher verwende ich NVM https://github.com/creationix/nvm

Vor diesem Hintergrund kann ich Ihnen ein funktionierendes Beispiel für -gglobale Installationen zeigen, bei denen NVM-, NPM- und Knotenpfade ohne Root verwendet werden.

Legen Sie Ihr Präfix fest, .npm-packagesfalls dies noch nicht geschehen ist. (Beachten Sie, das ist ein Bindestrich, kein Unterstrich)

nvm config ls
prefix = "/home/<yourusername>/.npm-packages"

Passen Sie dann Ihr ~ / .bash_profile oder .bashrc an, wenn Sie vorlesen möchten, warum und was hier mit den folgenden Informationen.

#PATH EXPORTS
NODE_MODULES=$HOME/.npm                                          
NPM_PACKAGES=$HOME/.npm-packages/bin                           
export PATH=$PATH:$HOME/bin:$NODE_MODULES:$NPM_PACKAGES         

#NVM ENABLE                                                 
export NVM_DIR="$HOME/.nvm"                                   
[ -s "$NVM_DIR/nvm.sh" ] && . "$NVM_DIR/nvm.sh" # This loads nvm 

Das deckt so ziemlich alle Wege ab. Für zB, wenn Sie schlucken wie folgt installieren npm install -g gulpsymbolisch verlinkt es in ~/.npm-packages/bin(Anmerkung , das ist ein Bindestrich, nicht ein Unterstrich). (keine Notwendigkeit für gulp-clioder gulp-cl)

Sie können so ziemlich alle anderen Knotenpfadexporte ersetzen / auskommentieren. Sie können diese Pfadinformationen sicher unter alle anderen Pfadinformationen setzen, die Sie bereits haben, ohne dass diese Informationen überschrieben werden.

blamb
quelle
1
  1. Fügen Sie die folgende Zeile zu Ihrem hinzu ~/.bash_profile

    export PATH="$HOME/.npm/bin:$PATH"
    
  2. Bash-Profil laden

    bash -l
    
Lasithds
quelle
1

Für Windows-Benutzer

Fügen Sie dies Ihrem Pfad hinzu: "% AppData% \ npm"

Adedoyin Akande
quelle
0

Das Problem, das ich hatte, war das Fehlen der Binärdateien, da die benutzerspezifische .npmrc- Datei in meinem Home-Verzeichnis auf bin-linkseingestellt war false, obwohl die default is true.

Nur für den Fall, dass dies Ihr Problem ist, überprüfen Sie, ob in keiner Ihrer .npmrc-Dateien false festgelegt ist.

Wenn Sie dann alle Module neu installieren, werden die Binärdateien am erstellt, prefixdamit Sie PATHsie sehen können.

dimpen
quelle
0

Überprüfen Sie den Binärordner Ihres globalen Knotenmoduls und fügen Sie ihn Ihrem $ PATH hinzu.

npm list -g | head -1

Wenn Sie nodenv verwenden, ändert sich der Pfad bei jeder Installation der globalen Knotenversion. Das Hinzufügen eines solchen Pfades löst mein Problem.

"$HOME/.nodenv/versions/$(nodenv global)/bin"

Verknüpfung zum Hinzufügen des Pfads zu zsh

$ echo 'export PATH="$HOME/.nodenv/versions/$(nodenv global)/bin"' >> ~/.zshrc
Rossa D.
quelle