Npm-Fehler beim Installieren von Paketen unter Windows Share


52

Ich habe Ubuntu 12.10 als VMware-Gast auf meinem Windows 8-Host.

Ich habe einen Ordner auf meinem Windows 8-Host freigegeben und dieser wird beim Start im Ubuntu-Gast mit folgendem Eintrag eingebunden fstab:

//myhost/work /work cifs credentials=/home/user/.smbcredentials,noserverino,nounix,uid=user,gid=user,file_mode=0777,dir_mode=0777 0 0 

Die Freigabe funktioniert einwandfrei und kann von einem Webserver wie nginx bedient werden.

Es scheint jedoch Probleme zu geben, wenn ich node.js-Pakete mit npm installiere. Ich erhalte eine Reihe von Fehlern wie die folgende:

user@ubuntu:/work/test$ sudo npm install grunt
npm http GET https://registry.npmjs.org/grunt
npm http 304 https://registry.npmjs.org/grunt
...
npm ERR! error rolling back Error: ENOTEMPTY, rmdir '/work/test/node_modules/grunt/node_modules/lodash'
npm ERR! error rolling back  grunt@0.4.1 { [Error: ENOTEMPTY, rmdir '/work/test/node_modules/grunt/node_modules/lodash']
npm ERR! error rolling back   errno: 53,
npm ERR! error rolling back   code: 'ENOTEMPTY',
npm ERR! error rolling back   path: '/work/test/node_modules/grunt/node_modules/lodash' }
npm ERR! Error: UNKNOWN, symlink '../which/bin/which'
npm ERR! If you need help, you may report this log at:
npm ERR!     <http://github.com/isaacs/npm/issues>
npm ERR! or email it to:
npm ERR!     <npm-@googlegroups.com>

npm ERR! System Linux 3.5.0-26-generic
npm ERR! command "/usr/bin/node" "/usr/bin/npm" "install" "grunt"
npm ERR! cwd /work/test
npm ERR! node -v v0.10.0
npm ERR! npm -v 1.2.14
npm ERR! path ../which/bin/which
npm ERR! code UNKNOWN
npm ERR! errno -1
npm ERR! Error: ENOENT, chmod '/work/test/node_modules/grunt/node_modules/findup-sync/test/fixtures/aaa.txt'
npm ERR! If you need help, you may report this log at:
npm ERR!     <http://github.com/isaacs/npm/issues>
npm ERR! or email it to:
npm ERR!     <npm-@googlegroups.com>

npm ERR! System Linux 3.5.0-26-generic
npm ERR! command "/usr/bin/node" "/usr/bin/npm" "install" "grunt"
npm ERR! cwd /work/test
npm ERR! node -v v0.10.0
npm ERR! npm -v 1.2.14
npm ERR! path /work/test/node_modules/grunt/node_modules/findup-sync/test/fixtures/aaa.txt
npm ERR! fstream_path /work/test/node_modules/grunt/node_modules/findup-sync/test/fixtures/aaa.txt
npm ERR! fstream_type File
npm ERR! fstream_class FileWriter
npm ERR! fstream_finish_call chmod
npm ERR! code ENOENT
npm ERR! errno 34
npm ERR! fstream_stack /usr/lib/node_modules/npm/node_modules/fstream/lib/writer.js:305:19
npm ERR! fstream_stack Object.oncomplete (fs.js:93:15)
npm ERR! Error: ENOENT, lstat '/work/test/node_modules/grunt/node_modules/minimatch/test/basic.js'
npm ERR! If you need help, you may report this log at:
npm ERR!     <http://github.com/isaacs/npm/issues>
npm ERR! or email it to:
npm ERR!     <npm-@googlegroups.com>

npm ERR! System Linux 3.5.0-26-generic
npm ERR! command "/usr/bin/node" "/usr/bin/npm" "install" "grunt"
npm ERR! cwd /work/test
npm ERR! node -v v0.10.0
npm ERR! npm -v 1.2.14
npm ERR! path /work/test/node_modules/grunt/node_modules/minimatch/test/basic.js
npm ERR! fstream_path /work/test/node_modules/grunt/node_modules/minimatch/test/basic.js
npm ERR! fstream_type File
npm ERR! fstream_class FileWriter
npm ERR! code ENOENT
npm ERR! errno 34
npm ERR! fstream_stack /usr/lib/node_modules/npm/node_modules/fstream/lib/writer.js:284:26
npm ERR! fstream_stack Object.oncomplete (fs.js:93:15)
npm ERR! Error: ENOENT, lstat '/work/test/node_modules/grunt/node_modules/glob/test/00-setup.js'
npm ERR! If you need help, you may report this log at:
npm ERR!     <http://github.com/isaacs/npm/issues>
npm ERR! or email it to:
npm ERR!     <npm-@googlegroups.com>
...
npm ERR! not ok code 0
user@ubuntu:/work/test$ 

Was könnte dieses Problem verursachen? Von der Kommandozeile kann ich chmod, rmdirunter anderem mit sudo ohne Probleme.

Antworten:


118

Laufen mit --no-bin-linksrepariert es für mich:

npm install --no-bin-links

--no-bin-linksfordert Sie npmauf, keine symbolischen Links zu erstellen. Meines Wissens gibt es keine Möglichkeit, Symlinks in eine Windows-Freigabe zu übersetzen.


15
Ich wünschte, ich könnte dich noch 200 Mal verbessern. Dies ermöglicht die Verwendung von Vagrant unter Windows.
Clint

1
npm install --no-bin-link funktioniert auch.
JamieJag

2
Gute Antwort! Aber gibt es eine Möglichkeit, dies mit den "devDependencies" einer package.json-Datei von Grunt zu bewerkstelligen? Das wäre großartig :)
Jelmer

1
Danke! Vagrant sollte dies in die offizielle Dokumentation für Windows aufnehmen. Alle meine Punkte gehören dir.
htxryan

1
Vielen Dank, Sie haben meinen Tag gerettet, ich kämpfte von 1 Tag
Manjunath Siddappa

6

Das Erstellen von Symlinks unter Windows auf dieser Seite hat mir sehr geholfen, was erklärt, dass dies auch dann geschieht, wenn Ihr freigegebener Ordner beschreibbar ist.

Um dies zu beheben, müssen Sie die Symlinks-Funktion in VirtualBox aktivieren.

Führen Sie an der Eingabeaufforderung cmd Folgendes aus:

VBoxManage setextradata YOURVMNAME VBoxInternal2/SharedFoldersEnableSymlinksCreate/YOURSHAREFOLDERNAME 1

Dann überprüfen Sie durch:

VBoxManage getextradata YOURVMNAME enumerate

Wenn Ihr Benutzer zur Gruppe Administratoren gehört, starten Sie VirtualBox mit "Als Administrator ausführen"!

Standardmäßig können in der Windows 7-Sicherheitsrichtlinie keine Symlinks erstellt werden, da dies eine potenzielle Sicherheitsbedrohung darstellt. Führen Sie "secpol.msc" aus und navigieren Sie zu "Zuweisung lokaler Richtlinien - Benutzerrechte". Fügen Sie Ihren Benutzer zu "Symbolische Links erstellen" hinzu. Ich habe das nicht ausprobiert, könnte es aber sein, dass die virtualbox danach als normaler Benutzer ausgeführt werden kann.


3

Stimmen Sie mit Lorem überein, aber es ist nicht genug.

  1. Führen Sie Virtualbox unter Windows als Administrator aus.

  2. Stellen Sie sicher, dass Sie ausgeführt haben: VBoxManage.exe setextradata YOUR_VM BoxInternal2/SharedFoldersEnableSymlinksCreate/YOUR_SHARED_FOLDER 1

Ersetzen Sie YOUR_VM und YOUR_SHARED_FOLDER durch Ihre Werte. Sie können den Wert überprüfen über:VBoxManage.exe getextradata boot2docker-vm enumerate

Es gibt einen Virtualbox-Fehler , der dieses Problem verfolgt.


1

Die neueren Versionen von VirtualBox sollten Symlinks zulassen, wenn Sie VirtualBox als Administrator starten (Rechtsklick: Als Administrator ausführen).

Gleiches gilt für Vagrant-Boxen: Führen Sie einfach Ihre cmd.exe / PowerShell als Administrator aus und Sie können loslegen.


0

in dieser npm- ausgabe @drmyersii gebe ich eine großartige lösung, ich werde nur kopieren und einfügen, um nicht nur die antwort zu verlinken.

Die wirkliche Lösung hier wäre, Ihre Konfiguration so einzustellen, dass Symlinks auf Windows-Hosts in Ihrem Vagrantfile zugelassen werden. Hier ist ein Beispiel (unter der Annahme, dass Sie es in VirtualBox ausführen):

config.vm.provider "virtualbox" do |v|
    v.customize ["setextradata", :id, "VBoxInternal2/SharedFoldersEnableSymlinksCreate/vagrant", "1"]
end

das hat bei mir super geklappt und jetzt kann ich gulp mit scotchbox verwenden .


0

Bei mir hat keine dieser Antworten funktioniert. Ich bin nicht sicher warum, aber ich glaube, es liegt daran, dass mein Anteil nfs ist. Daher konnte ich Symlinks nicht zulassen, selbst wenn ich als Administrator ausgeführt wurde und die setextradata-Einstellungen änderte. Ich habe mit gulp und einigen anderen Paketen gearbeitet, die Probleme zu haben scheinen, wenn sie --no-bin-links gehorchen . Es war STILL versucht, einige symbolische Verknüpfungen zu erstellen und offensichtlich fehlgeschlagen. Schließlich hat mich dieser Thread über Github zu einer "Lösung" gebracht, so abgedreht es auch sein mag. Ich habe das Projekt "einfach" in meinem nicht freigegebenen Ordner installiert und als NODEPATH festgelegt.

export NODE_PATH=/home/vagrant/PROJECTNAME/node_modules

Der Vorbehalt betrifft den gesamten Server und den Arbeitsablauf beim Aktualisieren / Ändern der Verpackung.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.