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?
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.
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
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
Das Ergebnis ist das gleiche. Wie bereits erwähnt, vermute ich, dass dies ein npm Problem sein könnte.
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!
Tags und Links javascript windows gruntjs vagrant