Npm-Installation fehlgeschlagen mit "kann nicht in wd ausgeführt werden"

153

Ich versuche, meine Knotenumgebung auf einer neuen Ubuntu 12.04-Instanz einzurichten, auf der Node 0.8.14 bereits installiert ist. Beim Versuch, sie auszuführen, sind jedoch Probleme aufgetreten npm install. Wenn ich es versuche npm install, heißt es, dass ich es als root oder adminisrator ausführen muss:

Error: EACCES, mkdir '/usr/local/lib/node_modules/coffee-script'
npm ERR!  { [Error: EACCES, mkdir '/usr/local/lib/node_modules/coffee-script']
npm ERR!   errno: 3,
npm ERR!   code: 'EACCES',
npm ERR!   path: '/usr/local/lib/node_modules/coffee-script',
npm ERR!   fstream_type: 'Directory',
npm ERR!   fstream_path: '/usr/local/lib/node_modules/coffee-script',
npm ERR!   fstream_class: 'DirWriter',
npm ERR!   fstream_stack: 
npm ERR!    [ 'DirWriter._create                 (/usr/local/lib/node_modules/npm/node_modules/fstream/lib/dir-writer.js:36:23)',
npm ERR!      '/usr/local/lib/node_modules/npm/node_modules/mkdirp/index.js:37:53',
npm ERR!      'Object.oncomplete (fs.js:297:15)' ] }
npm ERR! 
npm ERR! Please try running this command again as root/Administrator.

Wenn Sie jedoch versuchen, es als sudo auszuführen, wird Folgendes angezeigt:

npm WARN cannot run in wd PackNodeDev@0.0.1-166 npm install -g coffee-script node-gyp (wd=/home/ubuntu/PackNode)

In meiner package.json enthält es die folgenden Skripte:

"scripts": {
    "preinstall": "npm install -g coffee-script node-gyp",
    "start": "node server.js",
    "test": "mocha --require should --compilers coffee:coffee-script --colors"
 },

Die restlichen Abhängigkeiten sind gültig, da ich alles richtig auf meinem eigenen Computer (Mac) installiert habe. Hat jemand eine Ahnung, warum dies geschieht?

EH
quelle

Antworten:

231

Die Dokumentation sagt (auch hier ):

Wenn npm mit Root - Rechten aufgerufen wurde, dann wird es die uid auf das Konto Benutzer ändern oder uid von der angegebenen userKonfiguration, die standardmäßig auf nobody. Setzen Sie das unsafe-permFlag, um Skripte mit Root-Rechten auszuführen.

Ihre Optionen sind:

  1. Laufen Sie npm installmit der --unsafe-permFlagge:

    [sudo] npm install --unsafe-perm
  2. Fügen Sie die unsafe-permFlagge zu Ihrem hinzu package.json:

    "config": {
        "unsafe-perm":true
    }
    
  3. Verwenden Sie das preinstallSkript nicht, um globale Module zu installieren, installieren Sie sie separat und führen Sie dann das reguläre Modul npm installohne Root-Rechte aus:

    sudo npm install -g coffee-script node-gyp
    npm install
    

Verwandte :

Dmitry Pashkevich
quelle
2
Entschuldigung, ich habe das bis jetzt nicht gesehen. Ich habe die "unsichere Dauerwelle" schon einmal ausprobiert, aber sie hat auch nicht funktioniert. Das Problem besteht immer noch
EH
10
Dies funktioniert für mich: funktioniert sudo npm install --unsafe-permjedoch sudo npm installnicht, obwohl ich "unsafe-perm":truezu package.json hinzugefügt habe ... Ich weiß nicht warum
Dmitry Pashkevich
8
Durch Hinzufügen zur Eigenschaft "config" in package.json wird "npm_package_config_unsafe_perm" festgelegt, sodass Option 2 nicht funktioniert. Siehe: stackoverflow.com/questions/28763958/…
Justmoon
'unsafe-perm': true ist auch für mich fehlgeschlagen. Schade, dass es den Fehler und den Kontext (einschließlich seiner UID-Änderung) in der Fehlermeldung nicht angegeben hat, anstatt die Ursache aus der Existenz zu entfernen und etwas Kryptisches, Überraschendes und Feindliches zu geben.
android.weasel
Während npm install --unsafe-permich arbeite, habe ich versucht, die Implikation bezüglich der Änderung der Standardkonfiguration zu befolgen user. Also habe ich npm set user my_userund npm set group my_group, was die entsprechenden Einträge in die .npmrcDatei des Root-Benutzers hinzufügt . Das Problem ist jedoch, dass der node_modulesOrdner selbst und seine Unterordner immer noch im Besitz von root sind, sodass dies nicht hilft. Ich konnte keine Möglichkeit finden, sie nicht im Besitz von root zu haben.
Fulv
53

Das einzige, was für mich funktioniert hat, war das Hinzufügen einer .npmrcDatei mit:

unsafe-perm = true

Das Hinzufügen derselben Konfiguration zu package.jsonhatte keine Auswirkung.

Ablenkung
quelle
35
im Hafen:RUN npm set unsafe-perm true
Alexander Mills
Wenn Sie WSL verwenden, geben Sie einfach set unsafe-perm true ein. Dies wird Ihnen helfen
Stas Panyukov
26

Ich habe das gleiche Problem beim Versuch, meine nodejs-App auf einem privaten Server zu veröffentlichen, auf dem CentOs mit Root-Benutzern veröffentlicht werden. Der gleiche Fehler wird von "postinstall" ausgelöst: "./node_modules/bower/bin/bower install" in meiner package.json-Datei. Die einzige Lösung, die für mich funktioniert hat, besteht darin, beide Optionen zu verwenden, um den Fehler zu vermeiden:

1: Verwenden Sie die Option --allow-root für den Befehl bower install

"postinstall": "./node_modules/bower/bin/bower --allow-root install"

2: Verwenden Sie die Option --unsafe-perm für den Befehl npm install

npm install --unsafe-perm
Yassine Khachlek
quelle
12

OP hier, ich habe viel mehr über Knoten gelernt, seit ich diese Frage zum ersten Mal gestellt habe. Obwohl Dmitrys Antwort sehr hilfreich war, war es für mich letztendlich, den Knoten mit den richtigen Berechtigungen zu installieren.

Ich empfehle dringend, den Knoten nicht mit Paketmanagern zu installieren, sondern ihn selbst zu kompilieren, damit er sich in einem lokalen Verzeichnis mit normalen Berechtigungen befindet.

Dieser Artikel enthält eine sehr klare Schritt-für-Schritt-Anleitung dazu:

https://www.digitalocean.com/community/tutorials/how-to-install-an-upstream-version-of-node-js-on-ubuntu-12-04

EH
quelle
2

Ich habe dies behoben, indem ich den Eigentümer von /usr/localund ~/Users/user-namewie folgt geändert habe:

sudo chown -R my_name /usr/local

Dadurch konnte ich alles ohne machen sudo

Daniel O'Leary
quelle