it-swarm.com.de

npm/yeoman installiere generator-angle ohne sudo

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 Sudo yo eingebe, sagt man mir, dass ich Sudo nicht verwenden sollte (was absolut verständlich ist). 

Ich habe ein ~/node_modules-Verzeichnis - warum installiert ihr seine Pakete nicht dort?

71
Karan

Generatoren können global installiert werden. Andernfalls müssen Sie immer den Generator installieren, den Sie in jedem Projekt verwenden möchten, was unnötig schmerzhaft ist. Sie können auch nicht das schöne yo-Menü sehen, in dem alle verfügbaren Generatoren aufgelistet sind (es sei denn, Sie installieren sie all lokal):

yo

Npm für die globale Installation einrichten

Wie können wir also erreichen, dass npm Pakete global installiert? Wie Sie richtig gesagt haben, sollten Sie niemals yo mit Sudo ausführen. 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 Benutzer Pakete im Ordner global/usr/ zu installieren. /usr/ ist für Software, die von allen Benutzern des Computers gemeinsam genutzt wird. Auch wenn nur die Maschine verwendet wird, gibt es immer noch gute Gründe, die Gestaltung der Unix-Dateisystemhierarchie zu respektieren. Zum Beispiel, wenn Sie sich einmal dafür entscheiden, Ihre gesamte Knoteninstallation zu löschen.

Meine bevorzugte Möglichkeit, npm die globale Installation von Paketen zu ermöglichen, ohne $HOME auszulösen, ist , um ein Präfix für lokale Knoten festzulegen . Das ist so einfach wie das Laufen

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

in Ihrer lokalen Shell. Danach möchten Sie Ihren $ PATH so anpassen, dass er auf das neue Installationsziel für ausführbare globale Knoten verweist, indem Sie die Konfiguration Ihrer bevorzugten Shell anpassen. Z.B. beim Hinzufügen

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

zu Ihrem ~/.bashrc. Danach können Sie npm install -g generator-angular ohne Sudo problemlos ausführen, ohne in Berechtigungskonflikte zu geraten. Wenn etwas vollständig beschädigt ist und Sie von vorne anfangen möchten, müssen Sie lediglich das ~/.node-Verzeichnis entfernen.

168
passy

Dank @passy habe ich es endlich geschafft, dies auf Ubuntu 13.04 (für den Fall, dass jemand ähnliche Probleme mit dem Setup hat) 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 laufen:

npm install -g yo

führte zu

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

Fixiert 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'

Fixiert mit:

Sudo chown yourusername:yourusername /home/yourusername/.config/configstore/update-notifier-yo.yml
26
pagetribe

Ich habe versucht, yeoman dazu zu bringen, Nice mit meiner vagrant-Box zu spielen, und dies war das, was ich tun musste, um npm-Pakete global ohne Sudo auf ubuntu zu installieren:

1. Erstellen Sie das Verzeichnis zum Speichern globaler Pakete

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

2. Teilen Sie npm mit, wo die global installierten Pakete abgelegt werden sollen

Fügen Sie dieses Snippet in Ihre ~/.npmrc-Datei ein:

prefix=${HOME}/.npm-packages

3. Stellen Sie sicher, dass npm installierte binaries usw. finden kann

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

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 aus oder starten Sie das Terminal neu

$ source ~/.bashrc

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

0
datatype_void

hallo in meinem fall (am ubuntu 12.04) hat sich der addix in ~/.npmrc nicht geändert.

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

0

Von yoeman Erste Seite erscheint der Befehl:

yo doctor

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

0
molavec

Ich hatte einen fast identischen Fehler bei einer Rogue .yo-rc.json-Datei in meinem Stammverzeichnis aus einem Projekt, das ich zuvor installiert hatte. Yeoman hat cwd zur Hälfte von der Installation aus dem Installationsverzeichnis in das Root-Verzeichnis gewechselt, gab jedoch nur den EACCESS-Berechtigungsfehler aus, ohne dass das Installationsverzeichnis / angegeben wurde. Es dauerte Ewigkeiten, um herauszufinden, warum dies der Fall war, und das Debuggen durch die Quelle von Yeoman. Dabei habe ich schließlich erfahren, dass Yeoman den Verzeichnisbaum nachschlagen wird, bis er einen .yo-rc.json findet, und den Code dort generiert, indem er chdir an den neuen Speicherort ruft.

Yeoman sollte vielleicht prüfen, ob der Benutzer Schreibrechte für das Verzeichnis hat. Alternativ könnte er in der Ausgabe angeben, dass sich die cwd geändert hat, oder den Namen des Installationsverzeichnisses ausgeben, wenn .yo-rc.json anders ist als cwd.

Der Befehl zum Auffinden von Rogue-.yo-rc.json-Dateien 

Sudo find / -name .yo-rc.json

0
Sean