2013-05-23 17 views
20

Derzeit laufe ich immer sudo npm install <package-name>, aber wie ich verstehe, ist es nicht korrekt.npm Befehl - Sudo oder nicht?

Ich möchte Gelegenheit haben, es nicht als root/Administrator zu verwenden. ich einen Rat gefolgt und verwenden diesen Befehl sudo chown -R <username> ~/.npm aber es wird nicht funktionieren ...

zum Beispiel, dann ist es eine Ausgabe meines npm install jade

... 
npm http 200 https://registry.npmjs.org/amdefine 
npm http GET https://registry.npmjs.org/amdefine/-/amdefine-0.0.5.tgz 
npm http 200 https://registry.npmjs.org/amdefine/-/amdefine-0.0.5.tgz 
npm ERR! Error: EACCES, symlink '../jade/bin/jade' 
npm ERR! { [Error: EACCES, symlink '../jade/bin/jade'] errno: 3, code: 'EACCES', path: '../jade/bin/jade' } 
npm ERR! 
npm ERR! Please try running this command again as root/Administrator. 

wie Sie herunterladen sehen begann nicht erfolgreich, aber dann ..

Ich frage mich, was ist der beste Weg, Sudo auf Npm zu verbieten?

Antwort

15

Es ist möglich (und ratsam) zu npm install -g Knotenmodule ohne sudo.

Überprüfen Sie die Berechtigung Ihres Ordners /usr/local/share/npm/bin. Ich hatte Knoten und Npm durch brew (ohne sudo) installiert und dieser bestimmte Ordner wurde von Root gehört.

Dieses regelte es für ein für alle Mal: ​​

$ sudo chown $(whoami) /usr/local/share/npm/bin 

(Was sudo mit npm disallowing. Sie npm für das zwicken müss Ihre eigenen Knoten Code Verwendung von https://npmjs.org/package/sudo-block machen könnte, npm install sudo-block)

+2

Ich hatte Berechtigungen geändert werden sowohl für /usr/local/bin und /usr/local/lib/node_modules –

+0

@TelmoDias ich auch auf das gleiche hatte, so scheint es npm das Verzeichnis geändert haben kann verwendet, um globale Pakete zu installieren – Knights

+0

danke, sehr gute Antwort. – theCodeSurgeon

4

Sie können auch tun:

sudo chown -R $USER /usr/local 

und rekursiv die Dateien auf Ihrem aktuellen Benutzer ändern.

0

Die zwei hier angebotenen Lösungen sind nicht etwas, das ich empfehlen würde, weil sie Brute-Force-Lösungen sind. Stattdessen empfehle ich das Lesen One does not simply sudo npm

1

ich diese gefunden haben, eine bessere Lösung

sudo chown -R $USER /Users/$USER

Dies wird nur ändern, um die Eigentümer Ihrer Benutzer sein sollte Ihnen und npm unter Ihrem Benutzer auf OS X installiert werden Alles, was ich gelesen habe, sagt sudo für npm-Installationen ist schlecht und ich würde ihnen zustimmen müssen, wenn Sie sich für bösartige Skripte öffnen.

11

Meiner Meinung nach ist der sauberste Weg, um den NPM-Präfix angeben:

npm config set prefix ~/.node_modules 

Und dann folgenden hinzufügen, um Sie .bash_profile

export PATH=$HOME/.node_modules/bin:$PATH 

Jetzt werden die Pakete in Ihr Benutzerverzeichnis installieren und keine Berechtigungen werden beeinträchtigt.


EDIT: Wenn Sie nicht Yeoman, erstellen Sie eine bash-Datei in einem Ihrer PATH Verzeichnisse mit dem Namen yodoctor mit folgendem Inhalt

#!/bin/bash 
yo doctor 

Machen Sie die Datei ausführbar mit

installieren
chmod +x yodoctor 

Und jetzt sollten Sie Yeoman installieren können.

+2

Siehe die empfohlenen Optionen von npm zur Behebung des npm-Berechtigungsproblems: [https://docs.npmjs.com/getting-started/fixing-npm-permissions](https://docs.npmjs.com/getting-started/fixing-npm -permissions). Diese Antwort (von @febLey) entspricht den Empfehlungen von NPM. – Yiling

Verwandte Themen