ng dienen dazu, Dateiänderungen nicht automatisch zu erkennen

110

Ich muss ng servejedes Mal ausführen, wenn Änderungen an den Quelldateien vorgenommen werden. Ich habe keinen Fehler in der Konsole.

Angular CLI: 1.6.2
Node: 8.9.1
OS: linux ia32
Angular: 5.1.2
... animations, common, compiler, compiler-cli, core, forms
... http, language-service, platform-browser
... platform-browser-dynamic, router

@angular/cdk: 5.0.2-c3d7cd9
@angular/cli: 1.6.2
@angular/material: 5.0.3-e20d8f0
@angular-devkit/build-optimizer: 0.0.36
@angular-devkit/core: 0.0.22
@angular-devkit/schematics: 0.0.42
@ngtools/json-schema: 1.1.0
@ngtools/webpack: 1.9.2
@schematics/angular: 0.1.11
@schematics/schematics: 0.0.11
typescript: 2.4.2
webpack: 3.10.0
Bhaskararao Gummidi
quelle
2
Haben Sie versucht, ngwatch zu dienen?
planet_hunter
2
Ja. Aber es hat mein Problem nicht gelöst
Bhaskararao Gummidi
Bitte überprüfen Sie meine aktualisierte Antwort und lassen Sie mich wissen, ob das Problem dadurch behoben wird.
planet_hunter
Versuchen Sie diesen Weg - stackoverflow.com/a/42534127/1191125
zeleniy

Antworten:

151

Meistens unter Linux ng serveoder ng build --watchfunktioniert nicht, wenn das Verzeichnis nicht über ausreichende Berechtigungen verfügt.

Die Lösung besteht entweder darin, die erforderlichen Berechtigungen bereitzustellen oder sudostattdessen zu verwenden .

AKTUALISIEREN

Das Watch-Flag in ng serveist tatsächlich redundant, da es die Standardoption ist. Dank an @Zaphoid für den Hinweis auf den Fehler.

planet_hunter
quelle
29
Danke dir. Ich laufe ng servemit sudoBerechtigungen. Es hat funktioniert.
Bhaskararao Gummidi
1
Dann akzeptieren Sie dies bitte als Antwort, die anderen helfen wird, die diese Frage in Zukunft lesen
Mawg sagt, Monica am
3
@Mawg Anstatt sudo zu verwenden. Welche Berechtigung sollten die Dateien haben?
Oracleruiz
2
Hängt vom Benutzer ab, der ausgeführt wird, vielleicht genauso wie a+x, aber ich warne davor, Berechtigungen zu verwenden, anstatt sudo. sudoist für einen einzelnen Befehl, während das Ändern von Berechtigungen diese für immer ändert, was ein größeres Sicherheitsleck zu sein scheint.
Mawg sagt, Monica
5
--watchsollte nicht notwendig sein, da dies eine Standardeinstellung ist, siehe angle.io/cli/serve . Also @T. van den Bergs Antwort war tatsächlich präziser!
Zaphoid
126
ng serve --poll=2000

Funktioniert gut unter Linux und Windows

Dhandapani Loganathan
quelle
19
Was bedeutet es (--poll)
HD ..
1
Kann bestätigen, dass dies funktioniert. Ausführen des Linux-Subsystems unter Windows 10 (Ubuntu) mit VS-Code unter Windows.
Ales Potocnik Hahonina
Arbeitet auf Ubuntu 18.0.4
Nishān Wickramarathna
2
Das hat am Ubuntu 18.04 funktioniert. Kannst du bitte den Grund beschreiben?
Vijender Kumar
1
Für mich funktioniert gut! Aber ich verstehe nicht, warum "ng serve" das Projekt nicht neu lädt.
José Luiz Gonzaga Neto
81

Bedenken Sie, dass bei einer großen Anzahl von Dateien bei INotify Watches unter Linux ein Limit besteht . So kann beispielsweise eine Erhöhung des Uhrenlimits auf 512 KB behoben werden.

sudo sysctl fs.inotify.max_user_watches=524288
sudo sysctl -p --system

Beachten Sie, dass der vorherige Vorgang eine speicherinterne Änderung verursacht, die Sie nach dem Neustart verlieren.

Sie können es jedoch dauerhaft machen , indem Sie Folgendes ausführen:

echo fs.inotify.max_user_watches=524288 | sudo tee /etc/sysctl.d/40-max-user-watches.conf && sudo sysctl --system

Als Referenz können Sie Folgendes überprüfen: https://github.com/angular/angular-cli/issues/8313#issuecomment-362728855 und https://github.com/guard/listen/wiki/Increasing-the-amount- of-inotify-watchers

Muhammad Altabba
quelle
5
Dies funktionierte für mich auf Ubuntu 14 - "echo fs.inotify.max_user_watches = 524288 | sudo tee /etc/sysctl.d/40-max-user-watches.conf && sudo sysctl --system"
mahesh kajale
1
Sie können diesen Befehl verwenden, um das aktuelle Überwachungslimit zu überprüfen / zu testen. Die obige cat /proc/sys/fs/inotify/max_user_watches Antwort ist eine vollständig vollständige Antwort, aber hier ist ein Link mit etwas mehr Beschreibung Confluence.jetbrains.com/display/IDEADEV/Inotify+Watches+Limit
Junaid
hat gut funktioniert. Es ist erwähnenswert, dass einige IDEs (wie JetBrains Webstorm) inotify verwenden, um auch Dateiänderungen zu verfolgen. Denken Sie also daran, wenn Sie 5 Projekte öffnen und dann ng serve ausführen.
Multis
25

Aus diesem Grund kann das System, das Änderungen erkennt, standardmäßig nicht so viele Uhren verarbeiten.

Und die Lösung besteht darin, dass change the amount of watchesSie Folgendes verarbeiten können (die maximale Anzahl von Dateien, die im Projekt enthalten sein werden) run this command:

echo 65536 | sudo tee -a /proc/sys/fs/inotify/max_user_watches

Das Problem mit inotify besteht darin, diesen Zähler bei jedem Neustart Ihres Computers zurückzusetzen.

Chintan Kotadiya
quelle
5
echo fs.inotify.max_user_watches = 524288 | sudo tee -a /etc/sysctl.conf && sudo sysctl -p
Wagner da Silva
18

In Ihrem Projekt gehört der dist-Ordner zum Stammverzeichnis

Versuchen Sie, sudo ng serveanstelle von zu verwenden ng serve.

Eine andere Lösung

Wenn eine große Anzahl von Dateien vorhanden ist, funktioniert watch unter Linux nicht. Bei INotify Watches unter Linux gibt es ein Limit. Also das Uhrenlimit erhöhen

//When live server not work in linux

sudo sysctl fs.inotify.max_user_watches=524288
sudo sysctl -p --system

ng serve //You can also do sudo **ng serve**
Bijay Pal
quelle
8

Sie müssen nur sudo ng ausführen , um das Problem zu beheben.

Sandeep Mishra
quelle
5
Gute Problemumgehung, aber warum das so ist, ist die eigentliche Frage ... als Root zu laufen ist nicht die beste Vorgehensweise ...
Pipo
5

Dies kann helfen, wenn es das gleiche Problem ist, das ich hatte. Der Versuch zu verwenden ng serveund ng build --watchmanchmal funktionierte, aber meistens suchten sie nicht nach Codeänderungen und ich dachte, es hätte etwas damit zu tun ng.

Dann erinnerte ich mich an ein Problem, das ich vor einiger Zeit mit inotify Uhren hatte

Ich habe dies auf meinem Ubuntu-Computer ausgeführt und es scheint sich eingeschaltet zu haben und Codeänderungen zu beobachten:

echo fs.inotify.max_user_watches = 524288 | sudo tee /etc/sysctl.d/40-max-user-watches.conf && sudo sysctl --system

Kredit geht an Scott Smith

Arul Murugan
quelle
3

Versuche dies. Wenn Sie dies mögen, müssen Sie nicht immer einen Befehl auslösen. Sie müssen nur einmal auslösen

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

cat /proc/sys/fs/inotify/max_user_watches

fs.inotify.max_user_watches=524288
Suhag Lapani88
quelle
3

Hat bei mir nicht funktioniert:

ng serve --watch

Versuchen :

sudo ng serve

das hat bei mir funktioniert!

Sahil Ralkar
quelle
2

Wenn alles andere fehlschlägt, überprüfen Sie Ihren Code auf Syntaxfehler - insbesondere auf index.html oder Teile Ihres Codes, die Sie kürzlich bearbeitet haben, kurz bevor dieses automatische Update fehlgeschlagen ist. Syntaxfehler beeinträchtigen diese Funktion zur automatischen Aktualisierung in Angular.

In meinem Fall waren mehrere Projekte in separaten VS-Code-Fenstern geöffnet. Bei allen meinen anderen Projekten hat es ng servewie erwartet funktioniert: Es wird beim Speichern automatisch aktualisiert. Bei einem Projekt wäre jedoch eine manuelle Aktualisierung erforderlich, um das Update durchzuführen. Es endete damit, dass ich HTML-Kommentare außerhalb des definierten HTML-Bereichs der Vorlage hatte (also kamen die HTML-Kommentare vorher <!doctype html>. Es war also ungültig, da es sich um eine HTML-Syntax außerhalb eines HTML-Bereichs handelt.

Ich habe die Kommentare gelöscht und bam, das automatische Update hat wieder funktioniert (nach einer weiteren manuellen Aktualisierung).

Gehen Sie also index.htmlandere Teile Ihres Codes durch, die Sie kürzlich bearbeitet haben, bevor dies kaputt ging, und schneiden Sie nacheinander skizzenhafte Teile aus, aktualisieren Sie sie im Browser, kehren Sie dann zu VS Code zurück und nehmen Sie eine Änderung vor, speichern Sie sie und prüfen Sie, ob sie automatisch aktualisiert wird .

Kyle Vassella
quelle
1
Andere Fehler mit der Vorlage können ebenfalls die ordnungsgemäße Funktion beeinträchtigen. In meinem Fall hatte ich eine benutzerdefinierte Komponente, die eine erwartete @Input(), aber das Attribut war wie folgt leer : [myInput]="". Füllen Sie es mit einem wiederhergestellten Wert ng serve, keine manuelle Aktualisierung erforderlich.
Zarepheth
2

Ich habe festgestellt, dass der Ordner dist / im Projekt root gehört. Deshalb sudo ng servesieht man die Änderungen wannng serve dies nicht der Fall ist.

Ich habe den Ordner dist / entfernt sudo rm -R dist/und ihn als aktuellen Benutzer neu erstellt, indem ich den Entwicklungsserver gestartet habe, ng serveund alles hat wieder funktioniert.

T. van den Berg
quelle
2

Ich hatte dieses Problem bei einer neuen Linux-Ubuntu-Installation und bemerkte, dass in VSCode gleichzeitig ein Fehler über "zu viele Beobachter für Limits" angezeigt wurde. Ich habe die Anweisungen befolgt, um das Problem in VSCode zu beheben, und es hat auch das Problem mit ng watch behoben. Weitere Informationen finden Sie hier https://code.visualstudio.com/docs/setup/linux#_visual-studio-code-is-unable-to-watch-for-file-changes-in-this-large-workspace-error-enospc

Ich bemerkte Leute, die vorschlugen sudo, Wache zu laufen. Dies ist ein gefährliches Spiel. Sie gewähren npm-Paketen Root-Zugriff auf Ihr System. Wenn Ihre Berechtigungen korrekt sind, könnte mein Problem Ihr Problem sein, da das Limit pro Benutzer gilt. Wenn Sie als sudo ausgeführt werden, werden Sie als root ausgeführt, anstatt als Ihr aktueller Benutzer, der das Limit überschreitet (indem Sie eine uhrenlastige Idee wie vscode oder atom ausführen auf ). Wenn Sie aus irgendeinem Grund die falschen Berechtigungen haben, stellen Sie diese ordnungsgemäß auf Ihren Benutzer / Ihre Gruppe mit ein chown.

Spera
quelle
+1 für das Vorschlagen zu verwenden , chownanstatt laufen ng servemit sudo, die mit allen Mitteln vermieden werden sollte!
Tobi
1

Ich hatte das gleiche Problem mit sudo ng serve schien das Problem unbefriedigend zu "lösen". Verwenden vonsudo ist IMO nicht zufriedenstellend.

Ich habe meine INotify-Anzahl mit meinem Standardlimit (8192) verglichen, indem ich Folgendes verwendet habe: lsof | grep inotify | wc -l Der vom obigen Befehl zurückgegebene Wert war weit unter dem Limit. Die INotify-Lösung schien also nicht auf mein Problem zuzutreffen.

Ich habe auch die Berechtigungen und den Besitz überprüft. Beide schienen in Ordnung zu sein, vergleichbar mit einem anderen Projekt, das funktioniert hat.

Aus Frustration habe ich VS Code neu gestartet. Grundsätzlich habe ich alle Instanzen geschlossen, zwei ausgeführt und beide erneut geöffnet, woraufhin das Problem behoben wurde.

Ich neige irgendwo zu einem möglichen Fehler. Dies ist zu beachten, bevor Sie Ihr System auf den Kopf stellen. Zum Glück / Leider ist dieses Problem nicht wieder aufgetreten, ich werde tiefer graben, wenn es das tut.

Donovan
quelle
1

Sie können dies auch versuchen.

sudo ng serve
Gurpreet Singh
quelle
1

Ich empfehle nicht, die SO-Parameter zu ändern. Nach dem Ändern des Parameters fs.inotify.max_user_watches sind einige (Verzögerungs-) Probleme aufgetreten, da andere Dienste ausgeführt werden ...

Das "ng serve --poll = 2000" ist eine gute Lösung, aber Sie werden diesen Parameter wahrscheinlich vergessen ...

Untersuchung: https://github.com/angular/angular-cli/wiki/angular-cli Ich hatte die folgende Lösung durchgeführt.

De angular.json wurde mit dem Poll-Parameter geändert

"serve": {
   "builder....
   "options": {
        "browserTarget": "xkcd:build",
        "poll": 2000
   }
   ...

Funktioniert auf meiner Maschine: D.

wdavilaneto
quelle
Danke dir! Dies ist eine Ad-hoc-Methode, um es auszuführen, ohne die Konfigurationsdateien zu ändern : npm run ng serve -- --poll=2000. Dies ist nicht so gut wie die Erkennung von Dateiänderungen, sondern funktioniert nur auf meinem Computer (Unternehmensvariante von Ubuntu 18.04). Ich habe max_user_watches auf 524288 gesetzt, erkenne aber ng servenach einiger Zeit immer noch keine Änderungen. Ich habe bessere Dinge zu tun, als dies zu untersuchen, also ist diese Lösung genau das, was ich brauche.
Andrei Sinitson
1

Den sudo ng serveBefehl auszuführen ist eine schlechte Praxis. Sie müssen die npmBerechtigung ändern, damit npm packagesSie sie nicht jedes Mal verwenden müssen, wenn Sie einige installieren müssen sudo.

Über diesen Link können Sie ändern, wie Sie die npm-Berechtigung für den aktuellen Benutzer ändern. Nachdem Sie diese Schritte ausgeführt haben, nachdem Sie die npm-Berechtigung festgelegt haben, können Sie den node_modulesOrdner aus Ihrem Projektverzeichnis entfernen und verwenden npm install. Nach Abschluss der Paketinstallation können Sie ausführen ng serveund müssen dies nicht sudo ng servejedes Mal tun, wenn Sie Ihr Winkelprojekt ausführen möchten.


quelle
1

für Fenster -

c:\>ng serve --open

Für Linux -

$sudo ng serve --open
Pravind Kumar
quelle
0

Meine Antwort ist möglicherweise nicht hilfreich. aber ich suche diese Frage deswegen.

Nachdem ich einen neuen Computer gekauft habe, vergesse ich, die automatische Speicherung im Editor einzustellen. Daher bleibt der Code tatsächlich unverändert.

Kenneth Chan
quelle
0

Ich möchte meinen Fall hier nur als Referenz belassen. In meinem Fall lag das Problem bei den Systemberechtigungen. Ich habe einen freigegebenen Ordner in einer VM als Repo verwendet. Ich hatte keine andere Nachricht wie Erlaubnis verweigert oder so. Versuchte alles und dann wurde mir klar, dass ich ein Netzwerklaufwerk verwendete.

Tsakiroglou Fotis
quelle
0

Der Neustart des Servers hat bei mir funktioniert.

Beatrice
quelle
0

Die vollständige Berechtigung für den Projektordner zu erteilen, hat bei mir funktioniert

Mohammed Muzammil
quelle
0

In meinem Fall auf einem Mac wurde dies behoben, indem dem angemeldeten Benutzer die Lese- / Schreibberechtigung für / usr / local / lib erteilt wurde

Pavel Popov
quelle