Ausführen von 'grunt' im VM Shared Directory

8

Bei der Verwendung von Vagrant mit einem Windows-Host und einem Linux-Gast hat grunt beim Versuch, einen Job auszuführen, den folgenden Fehler zurückgegeben:

Wie ich weiß, überschreitet dieser Dateipfad die 255-Zeichen-Grenze von Windows in einem freigegebenen Host-Gast-Verzeichnis.

%Vor%

Ich könnte ein nicht freigegebenes Verzeichnis auf meiner Gast-VM entwickeln, aber ich bevorzuge ein freigegebenes Verzeichnis, da ich eine IDE auf dem Host verwende.

Wie kann ich dieses Problem beheben, sodass ich grunt auf dem freigegebenen Verzeichnis ausführen kann?

    
Kevin Meredith 18.04.2014, 17:27
quelle

3 Antworten

5

Ich habe ein ähnliches Problem erlebt, als ich yeoman mit einem Winkelgenerator betrieben habe. Die Lösung, die ich gerade gefunden habe, ist ein kleiner Trick, der die Art nutzt, wie npm seine Abhängigkeiten und die Ordnerstruktur verarbeitet .

Bitte beachten Sie, dass das Problem, das auftritt, wahrscheinlich nur einige Dateien betrifft (und wahrscheinlich nur das Modul imagemin).

Für Yeoman bestand meine Lösung darin, zuerst die automatisch gestartete Installation zu überspringen und zu überspringen:

%Vor%

Manuelle Installation der Kannte:

%Vor%

Von hier aus sollte es für Sie interessant sein: Installieren Sie "request" npm Modul als Modul der ersten Ebene (anstelle einer Abhängigkeit, die später in imagemin tief aufgelöst wird):

%Vor%

Wenn Sie also die normale npm-Installation ausführen, um die verbleibenden Module abzurufen, wird das bereits vorhandene Anforderungsmodul verwendet.

%Vor%

Bitte beachten Sie, dass die Verwendung von --no-bin-links auch eine gute Idee ist, wenn Sie VirtualBox nicht ausführen möchten als Administrator .

Also, um Ihre Frage zu beantworten. Running Grunt sollte funktionieren, wenn Sie Ihre Pakete korrekt eingerichtet haben und npm install vorher anrufen. Das Modul "request" ist ein beliebiges Modul, das den großen Pfad der test-delayed-streams-and-buffers-and-strings.js -Datei verhindert.

    
Tarnschaf 27.04.2014 12:20
quelle
4

Wenn Sie den standardmäßigen Synchronisierungstyp " vboxsf " verwenden, sollten Sie den neuen rsync-basierten synchronisierten Ordner verwenden, um das Problem zu umgehen.

rsync type überwacht die Ordner zwischen Host und Gast, kopiert Verzeichnisse, um sie synchron zu halten.

Der Unterschied zwischen default vboxsf und rsync besteht darin, dass letzteres dazu führt, dass das Gast-Linux die Anwendung (grunt in Ihrem Fall) von seinem nativen Dateisystem aus ausführt (zB ext4 ) anstatt vboxsf ( von VirtualBox Guest Additions bereitgestellt, nachdem alle Dateien unter Windows sind).

rsync synchronisierter Ordner verwendet im Wesentlichen das rsync CLI-Dienstprogramm zum Kopieren / Synchronisieren von Dateien und Verzeichnissen zwischen Hosts. Also gibt es 2 Kopien von allem. Wenn Sie grunt für das Dateisystem im Gast ausführen, handelt es sich um ein systemeigenes Linux-Dateisystem, das nicht von einem langen Pfad betroffen sein sollte (aber ext4 hat eine maximale Dateiname Länge von 255 Byte).

Standardmäßig synchronisiert Vagrant nur die Ordner auf vagrant up oder vagrant reload . Sie können jedoch vagrant rsync ausführen, um die Synchronisierung manuell zu erzwingen, oder vagrant rsync-auto , um Änderungen zu überwachen und in Echtzeit zu synchronisieren.

Referenz: Ссылка

Sie können den synchronisierten Ordnertyp in Ihrem Vagrantfile unter

auf rsync einstellen %Vor%

Aktualisieren

Getestet, um die Verzeichnisbaumstruktur und eine Datei zu erstellen, kein Problem, es aus einer Linux-Perspektive zu öffnen, das Dateisystem ist ext4. Ich vermute, das ist ein Problem mit Npm.

%Vor%

Update - rsync synchronisierter Ordnertest

Ich habe den vorherigen Test auf einer physischen Linux-Installation durchgeführt. Das folgende ist auf einem schnellen Test auf Mac, Gast ist das selbe wie oben.

rsync synchronisierte Ordnerkonfiguration

%Vor%
  

HINWEIS: I chown -R vagrant:vagrant /u01/ rekursiv vorher, um Berechtigungsprobleme bei der Synchronisierung zu vermeiden.

Synchronisierung auf vagrant up

%Vor%

Das Ergebnis ist das gleiche. Wie bereits erwähnt, vermute ich, dass dies ein npm Problem sein könnte.

    
Terry Wang 23.04.2014 02:29
quelle
2

Eine aktuelle Lösung finden Sie in diesem Kommentar oder lesen Sie hier weiter:

%Vor%

Im obigen Code hänge ich \\? \ an den absoluten Pfad des aktuellen Verzeichnisses an. Dadurch wird das Windows-API gezwungen, eine Erhöhung der MAX_PATH-Variablen (normalerweise auf 260 begrenzt) zuzulassen. Lesen Sie mehr über max path . Dies geschieht während der Erstellung des sharedfolders, die absichtlich von VBoxManage und nicht von Vagrants Methode "synced_folder" gehandhabt wird. Das letzte Bit ist ziemlich selbsterklärend; Wir erstellen den neuen freigegebenen Ordner und stellen dann sicher, dass er bei jedem Zugriff auf oder Zugriff auf den Computer aktiviert wird, da Vagrant seine Mounts / freigegebenen Ordner bei jedem Laden neu laden möchte.

Ich hoffe, das hilft!

    
David Myers 19.03.2015 17:23
quelle