npm / yeoman installieren generator-eckig ohne sudo

73

Ich habe versucht, generator-anglejs mit Yo ( Yoeman ) ohne sudo zu installieren :

npm install -g generator-angular

Ich bekomme:

Error: EACCES, mkdir '/usr/lib/node_modules/generator-angular'

Wenn ich tippe sudo yo, sagst du mir, dass ich kein Sudo verwenden soll (was vollkommen verständlich ist).

Ich habe ein ~/node_modulesVerzeichnis - warum installierst du seine Pakete dort nicht?

Karan
quelle
Wohin rennst du yo angular?
Scottux

Antworten:

170

Generatoren sind für die globale Installation ausgelegt. Andernfalls müssen Sie immer den Generator installieren, den Sie in jedem Projekt verwenden möchten, was unnötig schmerzhaft ist. Außerdem sehen Sie nicht das schöne yoMenü, in dem alle verfügbaren Generatoren aufgelistet sind (es sei denn, Sie installieren sie alle lokal):

yo

Einrichten von npm für die globale Installation

Wie können wir npm dazu bringen, Pakete global zu installieren? Wie Sie richtig gesagt haben, sollten Sie niemals yomit Sudo laufen . Es gibt viele verschiedene Lösungen für dieses Problem und Sie können Stunden damit verbringen, ihre Vor- und Nachteile religiös zu diskutieren.

Ich persönlich mag es nicht, meine Benutzerpakete im globalen /usr/ Ordner zu installieren . /usr/ist für Software, die von allen Benutzern auf dem Computer gemeinsam genutzt wird. Auch wenn nur der Computer verwendet wird, gibt es gute Gründe, die Gestaltung der Unix-Dateisystemhierarchie zu respektieren. Zum Beispiel, wenn Sie sich an einem Punkt entscheiden, Ihre gesamte Knoteninstallation zu löschen.

Meine bevorzugte Möglichkeit npm, Pakete global zu installieren, ohne auszubrechen,$HOME besteht darin, ein lokales Knotenpräfix festzulegen . Das ist so einfach wie Laufen

echo 'prefix = ~/.node' >> ~/.npmrc

in Ihrer lokalen Shell. Danach möchten Sie Ihren $ PATH anpassen, um auf das neue Installationsziel für ausführbare Knoten des globalen Knotens zu verweisen, indem Sie die Konfiguration Ihrer bevorzugten Shell anpassen. ZB durch Hinzufügen

export PATH="$PATH:$HOME/.node/bin"

zu deinem ~/.bashrc. Danach können Sie npm install -g generator-angularproblemlos ohne sudo ausführen , ohne auf Berechtigungskonflikte zu stoßen. Wenn etwas völlig kaputt ist und Sie von vorne beginnen möchten, müssen Sie lediglich Ihr ~/.nodeVerzeichnis entfernen .

passy
quelle
1
Beim Einstellen sollte kein '$' vor PATH stehen. (Ich habe versucht, eine Bearbeitung durchzuführen, aber es gibt eine nicht hilfreiche Regel, dass "Änderungen mindestens 6 Zeichen lang sein müssen", daher wurde das Speichern abgelehnt.)
Febeling
1
@passy Ich habe immer noch Probleme mit Zugriffsrechten, aber anscheinend wurde das Präfix festgelegt: npm config get prefix => /home/friedrich/.node . Irgendeine Idee warum? ~ / .node ist in PATH: - /
stephanfriedrich
2
Ich bin gerade gelaufen sudo npm update -gfund es hat es behoben. Was habe ich getan und war es in Ordnung, dass ich in diesem Fall Sudo verwendet habe?
Stephen Smith
3
Ich musste auch hinzufügen: sudo chown -R 'Benutzername' ~ / .npm
Marco Ramires
1
Der zweite Befehl sollte seinecho 'export PATH=$HOME/.node/bin:$PATH' >> ~/.bashrc
Ryan
27

Dank @passy habe ich es endlich geschafft, dies auf Ubuntu 13.04 (falls jemand ähnliche Einrichtungsprobleme hat) mit den folgenden Funktionen zum Laufen zu bringen:

sudo apt-get update
sudo apt-get install python-software-properties python g++ make
sudo add-apt-repository ppa:chris-lea/node.js
sudo apt-get update
sudo apt-get install nodejs

versuchen zu rennen:

npm install -g yo

führte zu

Error: EACCES, mkdir '/usr/lib/node_modules/yo'

Behoben mit:

echo prefix = ~/.node >> ~/.npmrc
echo 'export PATH=$HOME/.node/bin:$PATH' >> ~/.bashrc 
. ~/.bashrc

Laufen:

yo webapp

führte zu:

Error: EACCES, permission denied '/home/username/.config/configstore/update-notifier-yo.yml'

Behoben mit:

sudo chown yourusername:yourusername /home/yourusername/.config/configstore/update-notifier-yo.yml
Pagetribe
quelle
2
Für den letzten Befehl musste ich $USER:stafffür Mac wechseln oder einfach$USER:USER
Matej
1
Ich habe nur den Ordner "~ / .node-gyp", keinen "~ / node" in OS X Mavericks.
MiB
0

Hallo, in meinem Fall (unter Ubuntu 12.04) hat der Präfixzusatz in ~ / .npmrc nichts geändert.

Wenn ja, erstellen Sie das Knotenpaket selbst und installieren Sie es in / opt / node oder /home/user/.node .

stephanfriedrich
quelle
0

Ich hatte einen fast identischen Fehler mit einer nicht autorisierten .yo-rc.jsonDatei in meinem Stammverzeichnis aus einem Projekt, das ich zuvor installiert hatte. Yeoman wechselte in der Mitte der Installation von cwd vom Installationsverzeichnis zum Stammverzeichnis, gab jedoch nur den EACCESS-Berechtigungsfehler aus, ohne dass Angaben zum Installationsverzeichnis gemacht wurden /. Es hat ewig gedauert, um herauszufinden, warum dies so war, und das Debuggen durch die Yeoman-Quelle beinhaltete, aber ich habe schließlich erfahren, dass Yeoman den Verzeichnisbaum durchsucht, bis er einen findet .yo-rc.json, und den Code dort generiert, indem er chdir an den neuen Speicherort ruft.

Yeoman sollte möglicherweise überprüfen, ob der Benutzer über Schreibberechtigungen für das Verzeichnis verfügt. Alternativ könnte in der Ausgabe entweder erwähnt werden, dass sich das cwd geändert hat, oder der Name des Installationsverzeichnisses gedruckt werden, wenn sich der gefundene Ort von .yo-rc.jsoncwd unterscheidet.

Der Befehl zum Suchen unerwünschter .yo-rc.json-Dateien

sudo find / -name .yo-rc.json

Sean
quelle
0

Auf der Einstiegsseite von yoeman wird der folgende Befehl angezeigt:

yo doctor

In meinem Fall ist $ NODE_PATH (in meinem Fall Ubuntu 14.04 in /etc/profile.d definiert) nicht dasselbe wie npm root. Das Hinzufügen von npm root in $ NODE_PATH löst das Problem.

molavec
quelle
es muss neu gestartet werden. Eine andere Möglichkeit ist das Hinzufügen von $ NODE_PATH = $ NODE_PATH: / usr / local / lib / node_modules in Ihrer .bashrc.
Molavec
0

Ich habe versucht , zu erhalten yeomanschön mit meiner zu spielen vagrantBox und das ist , was ich tun musste, installieren npmPakete global ohne sudoauf ubuntu:

1. Erstellen Sie das Verzeichnis zum Speichern globaler Pakete

$ mkdir "${HOME}/.npm-packages"

2. Geben Sie an, npmwo die global installierten Pakete abgelegt werden sollen

Fügen Sie dieses Snippet in Ihre ~/.npmrcDatei ein:

prefix=${HOME}/.npm-packages

3. Stellen Sie sicher, dass npmdas installierte binariesGerät usw. gefunden werden kann

Fügen Sie dieses Snippet in Folgendes ein .bashrc/.zshrc:

NPM_PACKAGES="${HOME}/.npm-packages"

PATH="$NPM_PACKAGES/bin:$PATH"

// `unset` `manpath` to allow inheritance from `/etc/manpath` with
// the `manpath` command
unset MANPATH // remove this line if you have previously modified `manpath`
export MANPATH="$NPM_PACKAGES/share/man:$(manpath)"

4. Führen Sie das folgende Terminal aus oder starten Sie es neu

$ source ~/.bashrc

Hoffe das hilft jedem, der sich in einer ähnlichen Situation befindet.

Datentyp_void
quelle