webpack --watch kompiliert keine geänderten Dateien

95

Ich habe versucht, es auszuführen, webpack --watchund nach dem Bearbeiten meiner JS-Dateien wird keine automatische Neukompilierung ausgelöst.

Ich habe versucht, neu zu installieren webpack, npm uninstallaber es funktioniert immer noch nicht.

Irgendwelche Ideen?

Alcedo
quelle

Antworten:

71

Zu Ihrer Information: Es scheint OS X einen Ordner werden beschädigt haben kann und nicht mehr senden fsevents(die watchpack/ chokidar/ Finder Anwendungen) für sich selbst und alle untergeordneten Ordner. Ich kann nicht sicher sein, ob Ihnen das passiert ist, aber es war sehr frustrierend für mich und einen Kollegen.

Wir konnten den beschädigten übergeordneten Ordner umbenennen und dann Ereignisse wie erwartet sofort beobachten. Weitere Informationen finden Sie in diesem Blogbeitrag: http://feedback.livereload.com/knowledgebase/articles/86239-os-x-fsevents-bug-may-prevent-monitoring-of-certai

Die empfohlenen Korrekturen über den obigen Link sind:

  • Starten Sie den Computer neu
  • Überprüfen der Festplatte und Reparieren von Berechtigungen über das Festplatten-Dienstprogramm
  • Hinzufügen des Ordners zur Spotlight-Datenschutzliste (die Liste der Ordner, die nicht indiziert werden sollen) und anschließendes Entfernen aus diesem Ordner, wodurch eine Neuindizierung erzwungen wird
  • Umbenennen des Ordners und möglicherweise Umbenennen
  • Erstellen Sie den Ordner neu und verschieben Sie den alten Inhalt wieder hinein

Die ersten beiden haben bei uns nicht funktioniert, den Spotlight-Vorschlag nicht ausprobiert und die Neuerstellung hat sich nicht als notwendig erwiesen.

Wir konnten den Stammproblemordner finden, indem wir den Finder öffneten und Dateien in jedem nachfolgenden übergeordneten Ordner erstellten, bis einer sofort angezeigt wurde (da der Finder ebenfalls von diesem Fehler befallen wird). Der Stammordner, der nicht aktualisiert wird, ist der Schuldige. Wir haben es einfach gemacht mvund mves wieder auf seinen ursprünglichen Namen gebracht, und dann hat der Beobachter gearbeitet.

Keine Ahnung, was die Korruption verursacht, aber ich bin nur froh, eine Lösung zu haben.

Ben Mosher
quelle
3
Ich habe meinen Ordner ~ / Sites in etwas anderes umbenannt und dann zurück in ~ / Sites, und der Fehler wurde behoben. Es wurden auch einige andere Fehler bei anderen Projekten behoben. Sprechen Sie über das Töten von 2 Fliegen mit 1 Stein. Ich danke dir sehr!!!
Kirk
Ich habe dieses Problem bei der Arbeit watchifyfestgestellt. Keiner der Schritte hat bei mir funktioniert, sodass ich am Ende Umfrage arg verwendet habe. Viele Leute geben das Umfragearg an browserify statt watchify weiter. Mein Code sieht aus wie:watchify(browserify(config.src,{}), {poll:100});
Ayman
1
Ich bin mir nicht 100% sicher, ob dies der Grund ist, aber das Ausschalten meines Dropbox-Synchronisierungsclients beim Versuch, watchify auszuführen, hat bei mir funktioniert. Sowohl das Ausführen npm installals auch das Umbenennen eines Verzeichnisses sind sehr intensive Vorgänge, wie der Synchronisierungsclient implementiert ist.
Jez
Der Neustart funktionierte für mich unter Linux. Ich hatte dieses Problem mit dem Webpack-Dev-Server, nachdem ich stundenlang versucht hatte herauszufinden, warum es gestern, aber nicht heute funktionierte ...
DomA
1
Ab 2017 hat mich diese Antwort immer noch vor der Hölle gerettet! Ich dachte, meine Webpack-Konfiguration ist die ganze Zeit falsch!
iamjc015
87

Wenn Ihr Code nicht neu kompiliert wird, erhöhen Sie die Anzahl der Beobachter (in Ubuntu):

echo fs.inotify.max_user_watches=524288 | sudo tee -a /etc/sysctl.conf && sudo sysctl -p

Quelle: https://webpack.github.io/docs/troubleshooting.html

César D. Velandia
quelle
sudo sysctl -pfunktioniert nicht bei Mavericks. Irgendwelche neuen Ideen?
Simon H
Es gibt ein aktuelles Problem mit Webpack 3 undModuleConcatenationPlugin . Durch Auslassen ModuleConcatenationPluginkann das Ansehen fortgesetzt werden.
Kross
@ SimonH versucht, /etc/sysctl.confdirekt zu betrachten und zu ändern ? Ändern bzw. diesen Schlüsselwert einstellen? (Wenn Sie den Befehl zum Anwenden von Ad-hoc ( sysctl -p) nicht finden können , dann ist es ein einzelner Neustart, und Sie sollten gut sein ...)
Frank Nocke
4
Ich empfehle , bevor die Anzahl der Uhren Überprüfung, um sicherzustellen , dass es nicht zugenommen hat (so dass Sie eine Idee, wenn dies könnte ge das Problem): dhsudo sysctl -a | grep max_user_watches
Frank Nocke
Dies löste mein Problem beim Ausführen von chroot (Ubuntu) auf einem Chromebook
Phil D.
40

Das Hinzufügen des folgenden Codes zu meiner Webpack-Konfigurationsdatei hat das Problem für mich behoben. Ich hoffe, dies hilft. Vergessen Sie nicht, Ihren Ordner node_modules zu ignorieren, da dies die Leistung von HMR (Hot Module Replacement) beeinträchtigen würde:

watchOptions: {
  poll: true,
  ignored: /node_modules/
}
CoderBriggs
quelle
1
@Lokesh Webpack kann Dateien überwachen und bei jeder Änderung neu kompilieren. Der Überwachungsmodus ist standardmäßig watch: truedeaktiviert und funktioniert möglicherweise auch. Polling ist die kontinuierliche Überprüfung anderer Programme oder Geräte durch ein Programm oder Gerät, um festzustellen, in welchem ​​Zustand sie sich befinden, normalerweise um festzustellen, ob sie noch verbunden sind oder kommunizieren möchten. Mit dieser Einstellung poll: truekann das Webpack den Status Ihres Programms überprüfen, um festzustellen, ob Änderungen vorgenommen wurden oder zumindest, was meiner Meinung nach geschieht.
CoderBriggs
Verknüpfen der Dokumente: Die pollOption wird von watchpack
Matthias
Nach dem Umbenennen und Neustarten war dies der Trick für mich (osx). ein dickes Lob!
Elad Katz
26

Ich hatte dieses Problem bei der Arbeit mit WebStorm.

Das Deaktivieren von Einstellungen -> Systemeinstellungen -> "Sicheres Schreiben" hat das Problem für mich behoben.

Die Empfehlung dazu finden Sie unter: WebPack-Fehlerbehebung

Chris
quelle
1
Vielen Dank! Es war wirklich nicht offensichtlich, dass das Problem im PhpStorm lag!
Sergey Zaharchenko
14

Nur um mögliche Lösungen hinzuzufügen: Ich hatte meinen Projektordner in einem Dropbox-Ordner, das Herausziehen löste das Problem für mich. (OS X)

Les
quelle
Das hat auch bei mir funktioniert - ich wünschte, diese Antwort wäre näher an der Spitze gewesen. OS X auch für mich (El Capitan).
Natchiketa
Dies hat auch mein Problem behoben. Dank dafür!
Federico
2
Wissen Sie, warum das passiert? @ Les
Ekaitz Hernandez Troyas
10

Ordner Groß- und Kleinschreibung war mein Problem. Meine Codeaufrufe für require () hatten alle Pfadnamen in Kleinbuchstaben, ABER die tatsächlichen Verzeichnisse enthielten einen Großbuchstaben. Ich habe alle meine Verzeichnisse in Kleinbuchstaben umbenannt und das Beobachten von Webpacks hat sofort funktioniert.

Acker Apple
quelle
Dies sollte nicht herabgestuft werden, es hat bei mir funktioniert. Es hat eine Weile gedauert, bis ich das Problem erkannt habe, da meine App immer noch korrekt lief, aber beim Live-Reload geht es insbesondere um die Groß- und Kleinschreibung.
Skwidbreth
Wenn Sie Ihr Projekt von Windows auf Mac migrieren, kann dies ein echtes Problem sein. Vielen Dank!
Eugene Kulabuhov
Selbes Problem hier. Es scheint, dass das Importieren von Dateien nicht auf Groß- und Kleinschreibung reagiert. Die Überwachung schlägt jedoch fehl, wenn der Pfadname genau mit dem Dateisystem übereinstimmt
Isaac
9

Ein Problem ist, dass, wenn Ihre Pfadnamen nicht absolut sind, solche Dinge passieren werden. Ich hatte versehentlich resolve.rootauf ./anstatt gesetzt __dirnameund dies führte dazu, dass ich viel Zeit damit verschwendete, Dateien wie die Jungs über mir zu löschen und neu zu erstellen.

Liam Horne
quelle
8

Wenn das Ändern von fs.inotify.max_user_watches gemäß César immer noch nicht funktioniert, versuchen Sie, Polling anstelle von nativen Beobachtern zu verwenden, indem Sie Ihr Skript wie in den Dokumenten gezeigt erstellen oder das Webpack mit --watch --watch-pollOptionen ausführen .

Angelo Selvini
quelle
8

Beachten Sie, dass wenn Sie das Webpack in einer virtuellen Maschine (Vagrant / Virtualbox) ausführen und Ihre Dateien auf der Host-Plattform ändern, Dateiaktualisierungen im freigegebenen Ordner unter Ubuntu möglicherweise keine Inotify auslösen. Dadurch werden die Änderungen nicht vom Webpack übernommen.

Siehe: Virtualbox-Ticket Nr. 10660

In meinem Fall hat das Bearbeiten und Speichern der Datei auf de guest (in vi) das Webpack ausgelöst. Wenn Sie es auf dem Host (in PhpStorm, Notepad oder einer anderen Anwendung) bearbeiten, wird das Webpack NICHT ausgelöst, was auch immer ich getan habe.

Ich habe es mit vagrant-fsnotify gelöst .

mk8374876
quelle
2
Obwohl ich vagrant-notify-forwarderfür mehr Magie Reload verwenden
Manh Tai
vagrant plugin install vagrant-notify-forwardermachte eine dauerhafte Lösung für mich
4givN
8

Arbeite für mich in Laravel Homestead

--watch --watch-poll
Alberto Oliveira
quelle
Dies funktionierte für mich (in einem nicht standardmäßigen Dateisystem) in Ubuntu
BT
7

Updates: Das Löschen des gesamten Verzeichnisses und das erneute Klonen von Git aus dem Repo behebt mein Problem.

Alcedo
quelle
2
Aber es muss einen Grund dafür geben
Moe Elsharif
Diese Lösung hat auch bei mir gut funktioniert. Sieht aus wie eine Ressourcenblockierung. Das erste Neuladen wurde in der Konsolenausgabe abgeschlossen, aber bundle.js wurde nicht aktualisiert. Beim zweiten Neuladen blieb es bei "Überprüfung in einem separaten Prozess gestartet ..." hängen.
Erik Parso
6

Wenn Sie Vim verwenden, sollten Sie versuchen, die Sicherungskopie auf "Ja" anstatt auf "Standard" zu setzen. Andernfalls benennt Vim manchmal die Originaldatei um und erstellt eine neue, was die Webpack-Uhr durcheinander bringt:

https://github.com/webpack/webpack/issues/781

Fügen Sie dies einfach zu Ihren vim-Einstellungen hinzu, wenn dies der Fall ist:

setze backupcopy = yes

Rosenfeld
quelle
4

Ich hatte das gleiche Problem mit einer .vue-Datei. Beim Neustart des Servers funktionierte alles einwandfrei, aber beim nächsten Speichern wurde es nicht mehr neu kompiliert. Das Problem lag im Importdateipfad, in dem ein Buchstabe groß geschrieben wurde. Es ist sehr schwer, dieses Problem zu erkennen, da bei einem Neustart des Servers alles funktioniert. Überprüfen Sie den Fall Ihrer Pfade.

Paulo Bruckmann
quelle
3

Es wurde für mich nicht neu kompiliert, aber dann wurde mir klar / ich erinnerte mich, dass Webpack das Abhängigkeitsdiagramm und nicht nur einen Ordner (oder Dateien) überwacht. Sicher genug, dass die Dateien, die ich geändert habe, noch nicht Teil dieses Diagramms waren.

Mike Cheel
quelle
3

Für mich war das Erstellen von Ordnern und Dateien in VS Code das Problem. Um dies zu beheben, habe ich mein Repo neu geklont und dieses Mal neue Ordner und Dateien über die Befehlszeile anstelle von Code erstellt. Ich denke, Code hat die Dateien aus irgendeinem Grund beschädigt. Ich habe gesehen, dass die Anwendung gerade aktualisiert wurde. Vielleicht ist es ein neuer Fehler.

lisafrench
quelle
2

Ich hatte ein ähnliches Problem, weder Webpack noch Rollup im Watch-Modus haben die von mir vorgenommenen Änderungen erfasst. Ich fand heraus, dass es im Grunde meine Schuld war, als ich das Modul (.tsx-Datei) wechselte, das noch nirgendwo in der Anwendung importiert wurde (zum Beispiel App.ts, das der Einstiegspunkt ist), und ich erwartete, dass Build-Tools Fehler melden würden dort gemacht.

itumb
quelle
1
Ich beginne diese Datei zu verwenden, indem ich sie dort importiere, wo sie verwendet werden sollte.
Itumb
Schön darauf hinzuweisen! Oh Gott, wie im Ernst, wie kann ich das vergessen? Ich muss mich nur anmelden, um hier einen Kommentar abzugeben und mich zu bedanken :)
Lucky Lam
2

Die Art und Weise, wie ich das Problem gelöst habe, bestand darin, einen Großschreibfehler in einem Importpfad zu finden. Der Ordner im Dateisystem hatte den ersten Buchstaben in Kleinbuchstaben, der Importpfad in Großbuchstaben. Alles wurde gut kompiliert, daher war dies nur ein Problem mit der Webpack-Uhr.

AotearoaCoder
quelle
2

Hatte auch dieses Problem in einer VirtualBox (5.2.18) Ubuntu (18.04) VM mit Vagrant (2.1.15) mit rsync-Synchronisation. Plötzlich läuft der erste Build großartig, aber Webpack berücksichtigt die Änderungen danach auch mit fs.inotify.max_user_watches=524288set nicht mehr. Hinzufügenpoll: true in der Webpack-Konfiguration hat auch nicht geholfen.

Nur vagrant-notify-forwarder funktioniert (vagrant-fsnotify aus irgendeinem Grund nicht), aber dann erfolgte die Neuerstellung zu schnell, nachdem die Datei auf dem Host gespeichert wurde, und ich nehme an, dass rsync nicht genug Zeit hatte, um seine Aufgabe zu beenden (möglicherweise aufgrund des Betrags) von synchronisierten Verzeichnissen in meiner Vagrant-Datei?).

Schließlich habe ich die Uhr wieder zum aggregateTimeoutLaufen gebracht, indem ich auch die in meiner Webpack-Konfiguration erhöhte:

module.exports = {
  watch: true,
  watchOptions: {
    aggregateTimeout: 10000
  },
  ...
}

Wenn diese Lösung für Sie funktioniert, versuchen Sie erneut, diesen Wert zu senken. Andernfalls müssen Sie 10 Sekunden warten, bis der Build jedes Mal neu gestartet wird, wenn Sie auf Speichern klicken. Der Standardwert ist 300 ms .

Benoît Vogel
quelle
1

Ich habe das gleiche Problem. Und ich stelle fest, dass es nicht kompiliert wird, weil mein Ordner ein Zeichen (*) enthält. Und die Verwendung des alten Watcher-Plugins scheint das Problem zu beheben. Fügen Sie diese Zeile Ihrer Webpack-Konfigurationsdatei hinzu.

plugins: [
    new webpack.OldWatchingPlugin()
  ]
Matte
quelle
1

Für mich node_moduleslöste das Löschen und erneute Installieren von npm oder das erneute Garnieren aller Pakete das Problem

Moe Elsharif
quelle
1

Was war die Ursache in meinem Fall:

Es scheint, dass der Wert von: max_user_watches in das /proc/sys/fs/inotify/max_user_watches Webpack beeinflusst

Um Ihren tatsächlichen Wert zu überprüfen

$cat /proc/sys/fs/inotify/max_user_watches
16384

16384 war in meinem Fall und es war immer noch nicht genug.

Ich habe verschiedene Arten von Lösungen ausprobiert, wie:

$ echo fs.inotify.max_user_watches=100000 | sudo tee -a /etc/sysctl.conf
$ sudo sysctl -p

Aber selbst wenn ich den Wert beim Neustart meines PCs ändern würde, würde er auf den Standardwert 16384 zurückgesetzt.

LÖSUNG, wenn Sie ein Linux-Betriebssystem haben (mein Fall, ich habe Manjaro):

Erstellen Sie die Datei:

sudo nano /etc/sysctl.d/90-override.conf

Und füllen Sie es mit:

fs.inotify.max_user_watches=200000

Es scheint, 200000 ist genug für mich.

Nachdem Sie die Datei erstellt und den Wert hinzugefügt haben, starten Sie einfach den PC neu und Sie sollten in Ordnung sein.

Alban Kaperi
quelle
0

Eine einfache Lösung unter MacOS ist die folgende:

Öffnen Sie zwei Terminalfenster in demselben Verzeichnis, in dem sich Ihr Projekt befindet.

Führen Sie im ersten Terminalfenster Folgendes aus: webpack --watch

Im zweiten Terminal wird Windows ausgeführt: webpack-dev-server

Ich habe viele mögliche Lösungen ausprobiert und dies scheint die zuverlässigste zu sein

Skiabox
quelle
PS: Ich benutze Mac OS Sierra.
Skiabox
Dies sind zwei völlig unterschiedliche Lösungen für dasselbe Problem, und Sie sollten sie wahrscheinlich nicht parallel ausführen. webpack --watchKompiliert das Projekt und speichert die Dateien auf der Festplatte. Dies entspricht der Ausführung webpacknach jedem Speichern. webpack-dev-serverist ein Entwicklungstool, das in den Speicher kompiliert und den Inhalt als Service über http bereitstellt. In jedem Fall ist Ihr Vorschlag keine Lösung, da die kompilierten Dateien nicht auf die Festplatte geschrieben werden, solange webpack --watchsie nicht wie angekündigt funktionieren.
ViggoV
0

Mögliche Lösung: Ändern des Kontexts in das App-Verzeichnis.

Ich hatte alle meine Webpack-Konfigurationsdateien in einem Unterordner:

components/
webpack/
 development.js
app.js

In webpack/development.js, Set hat context: path.join(__dirname, '../')mein Problem gelöst.

wwayne
quelle
0

Nachdem ich eine Handvoll Strategien zur Behebung dieses Problems ausprobiert hatte, gab ich einfach auf, aber während ich ein anderes Problem löste, versuchte ich es erneut und plötzlich --watchfunktionierte die Flagge endlich.

Um ehrlich zu sein, weiß ich nicht, warum es speziell funktioniert hat, aber nachdem ich die folgenden Schritte ausgeführt habe, hat es gerade angefangen zu funktionieren:

1. Install most recent gcc version
$ sudo port install gcc48
$ sudo port select --set gcc mp-gcc48

2. Install most recent clang version
$ sudo port install clang-3.6
$ sudo port select --set clang mp-clang-3.6

3. Export variables holding the patch to C and C++ compiler
$ export CC=/opt/local/bin/clang
$ export CXX=/opt/local/bin/clang++

Es könnte passiert sein, dass während der Installation dieser Pakete eine Abhängigkeit das fehlende Puzzleteil hinzugefügt hat, wer weiß ...

Hoffe, dies hilft jedem, der da draußen kämpft, damit es funktioniert.

utxeee
quelle
0

Ich füge eine weitere Antwort hinzu, weil ich glaube, dass dies die bisher beste Lösung ist. Ich benutze es jeden Tag und es rockt! Installieren Sie einfach diese Bibliothek:

https://github.com/gajus/write-file-webpack-plugin

Beschreibung: Erzwingt, dass das Webpack-Dev-Server-Programm Bundle-Dateien in das Dateisystem schreibt.

Wie installiert man :

npm install write-file-webpack-plugin --save-dev
Skiabox
quelle
0

Versuchen Sie , --watchzu-d --watch

arbeitete für mich

Adrin
quelle
0

Wenn dies in Ihrem Projekt plötzlich passiert ist, kann dies das Problem beheben.

Vielleicht haben sich die Dateien, die Ihr Projekt verfolgt haben, irgendwie geändert, nach denen das Webpack sucht. Sie können sie erneut erstellen, indem Sie einfache Schritte ausführen.

  1. komm aus deinem Projektverzeichnis heraus. ($: cd ..)
  2. Verschieben Sie Ihr Projekt in ein anderes Verzeichnis ($: mv {projectName} {newName})
  3. gehe in das neue Verzeichnis ($: cd {newName})
  4. Starten Sie den Server und prüfen Sie, ob er bei jeder Dateiänderung neu geladen wird (dies sollte in den meisten Fällen funktionieren, da das Webpack jetzt neue Dateien erstellt, um nach Änderungen zu suchen).
  5. komm aus dem dir ($: cd ..)
  6. Verschiebe es zurück zu seinem ursprünglichen Namen ($: mv {newName} {projectNam}) Dies hat bei mir funktioniert ............
Mohammed Shoeb
quelle
0

Ich bin auf diese Frage gestoßen, als ich ein ähnliches Problem hatte - es schien, dass das Webpack nicht neu gebündelt wurde, selbst wenn webpack --config ausgeführt wurde.

Ich habe sogar bundle.js gelöscht und die Webseite wurde immer noch wie vor meinen Änderungen angezeigt.

Für diejenigen unter Ihnen, die das gleiche Problem haben, habe ich endlich die Option "Cache leeren und hart neu laden" in Chrome ausgeführt (Rechtsklick auf die Schaltfläche zum erneuten Laden bei geöffneten Devtools), und das hat diesen Trick getan

Steven Anderson
quelle
0

Ich bin auf dasselbe Problem gestoßen, habe viele Dinge ausprobiert und schließlich hat Chrome Clear Browsing Data auf dem Mac für mich funktioniert.

Diese Module wurden installiert:

"browser-sync": "^ 2.26.7",

"browser-sync-webpack-plugin": "^ 2.2.2",

"webpack": "^ 4.41.2",

"webpack-cli": "^ 3.3.9"

Mahdiyeh
quelle
0

Das Problem lag in der Unterscheidung zwischen .js- und .ts-Dateien. Warum ?

Beim Erstellen eines Projekts kompiliert Visual Studio Typoskriptdateien in .js und .js.map. Dies ist völlig unnötig, da das Webpack auch Typoskriptdateien verarbeitet (mit awesome-typescript-loader). Beim Bearbeiten von .tsx-Komponentendateien in Visual Studio Code oder mit deaktiviertem compileOnSave Option in tsconfig.json wird die bearbeitete ts-Datei nicht neu kompiliert und mein Webpack verarbeitet eine nicht tatsächliche .js-Datei.

Die Lösung bestand darin, das Kompilieren von Typoskriptdateien in Visual Studio beim Erstellen eines Projekts zu deaktivieren. Hinzufügen

<TypeScriptCompileBlocked>true</TypeScriptCompileBlocked>

in PropertyGroup Ihrer .csproj.

Erik Parso
quelle