J'ai besoin d'exécuter ng serve
chaque fois que des modifications sont apportées aux fichiers source. Je n'ai aucune erreur dans la console.
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
Avez-vous essayé ng serve --watch
?
De plus, la plupart du temps sous Linux, ng serve --watch
ou ng build --watch
ne fonctionne pas si le répertoire ne dispose pas des autorisations suffisantes.
La solution consiste à fournir les autorisations nécessaires ou à utiliser Sudo
à la place.
METTRE À JOUR
le drapeau d'observation dans ng serve
est en réalité redondant car il s'agit de l'option par défaut. Nous remercions @Zaphoid d'avoir signalé l'erreur.
ng serve --poll=2000
Fonctionne bien sous Linux et Windows
En raison de, le système qui détecte les modifications ne peut pas gérer autant de contrôles par défaut.
Et la solution est dechange the amount of watches
il peut gérer (le nombre maximum de fichiers qui seront dans le projet) vous devezrun this command
:
echo 65536 | Sudo tee -a /proc/sys/fs/inotify/max_user_watches
Le problème avec inotify est de réinitialiser ce compteur chaque fois que vous redémarrez votre ordinateur.
Considérez que, lorsque vous avez un grand nombre de fichiers, il existe une limite à INotify Watches sous Linux. Augmenter la limite de montres à 512K, par exemple, peut résoudre ce problème.
Sudo sysctl fs.inotify.max_user_watches=524288
Sudo sysctl -p --system
Notez que la précédente entraîne une modification en mémoire que vous perdrez après le redémarrage.
Cependant, vous pouvez le rendre persistant, en exécutant:
echo fs.inotify.max_user_watches=524288 | Sudo tee /etc/sysctl.d/40-max-user-watches.conf && Sudo sysctl --system
À titre de référence, vous pouvez vérifier: https://github.com/angular/angular-cli/issues/8313#issuecomment-362728855 et https://github.com/guard/listen/wiki/Augmenter le nombre d'observateurs inotify
Il suffit de lancer Sudo ng pour résoudre le problème.
Vous pouvez essayer cela aussi.
Sudo ng serve
Cela peut aider si c’est le même problème que j’ai eu . Essayer d’utiliser ng serve
et ng build --watch
fonctionnait parfois, mais la plupart du temps, ils ne surveillaient pas les changements de code et j’imaginais que cela avait un rapport avec ng
.
Puis je me suis souvenu d’un problème que j’avais il ya quelque temps inotify watches
J'ai lancé ceci sur ma machine Ubuntu et il semble avoir démarré et regarder les changements de code:
echo fs.inotify.max_user_watches = 524288 | Sudo tee /etc/sysctl.d/40-max-user-watches.conf && Sudo sysctl --system
crédit va à Scott Smith
Dans votre projet, le dossier dist est propre à la racine
Essayez d’utiliser Sudo ng serve
au lieu de ng serve
.
Une autre solution
Quand il y a un grand nombre de fichiers, la montre ne fonctionne pas linux.Il y a une limite chez INotify Watches sous Linux. Donc, augmenter le limite de montres
//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**
pour les personnes qui utilisent Windows la commande ng serve --poll = 2000 fonctionne aussi.
ng serve --poll=2000
J'ai découvert que le dossier dist/du projet appartenait à root. C'est pourquoi Sudo ng serve
voit les modifications alors que ng serve
ne le voit pas.
J'ai supprimé le répertoire/dossier Sudo rm -R dist/
et je l'ai reconstruit en tant qu'utilisateur actuel en démarrant le serveur dev ng serve
et tout a fonctionné à nouveau.
J'avais ce problème sur une nouvelle installation de Linux Ubuntu et j'ai remarqué une erreur concernant «trop d'observateurs pour la limite» dans le VSCode en même temps. J'ai suivi les instructions pour résoudre le problème en VSCode et le problème lié à ng watch a également été résolu. Plus d'infos ici https://code.visualstudio.com/docs/setup/linux#_visual-studio-code-is-unable-to-watch-for-file-changes-in-this-large-workspace-error -enospc
J'ai remarqué des personnes suggérant Sudo
de faire fonctionner watch. C’est un jeu dangereux, vous donnez aux paquets npm un accès root à votre système. Si vos autorisations sont correctes, mon problème pourrait être votre solution, car la limite est définie par utilisateur. Si vous utilisez Sudo, vous vous exécutez en tant qu'utilisateur root au lieu de l'utilisateur actuel ayant dépassé la limite (exécution d'un ID de type Watch comme vscode ou atom. sur ). Si, pour une raison quelconque, vous avez les mauvaises autorisations, définissez-les correctement sur votre utilisateur/groupe avec chown
.
Exécuter la commande Sudo ng serve
est une mauvaise pratique. Vous devez modifier l'autorisation npm
afin que, si vous devez installer un certain npm packages
, vous ne soyez pas obligé d'utiliser Sudo
.
Ce lien peut résoudre le problème de modification de l'autorisation npm en faveur de l'utilisateur actuel. Après avoir défini cette procédure après avoir défini l'autorisation npm, vous pouvez supprimer le dossier node_modules
de votre répertoire de projet et utiliser npm install
. Une fois l’installation des packages terminée, vous pouvez exécuter ng serve
sans avoir à effectuer Sudo ng serve
à chaque fois que vous souhaitez exécuter votre projet angular.
Ma réponse peut ne pas être utile. mais je cherche cette question à cause de cela.
Après avoir acheté un nouvel ordinateur, j'oublie de définir la sauvegarde automatique dans l'éditeur. Par conséquent, le code reste inchangé.
Je faisais face au même problème, cela a résolu le problème de l'observateur pour moi https://github.com/angular/angular-cli/issues/8054#issuecomment-336615324
J'ai eu le même problème, en utilisant Sudo ng serve
semblait "résoudre" le problème de manière non satisfaisante. Utiliser Sudo
n'est pas satisfaisant, OMI.
J'ai vérifié mon nombre INotify par rapport à ma limite par défaut (8192) en utilisant:
lsof | grep inotify | wc -l
La valeur renvoyée par la commande ci-dessus était bien inférieure à la limite. La solution INotify ne semblait donc pas s'appliquer à mon problème.
J'ai également vérifié les autorisations et la propriété, les deux semblaient bien, comparables à un autre projet qui a fonctionné.
Par frustration, j'ai redémarré VS Code. Fondamentalement, j'ai fermé toutes les instances, j'en avais deux en cours d'exécution et les ai rouvertes toutes les deux, à la suite de quoi le problème a disparu.
Je me penche vers un possible bug quelque part. C'est une chose à considérer avant de mettre votre système à l'envers. Heureusement/Malheureusement, ce problème ne s'est pas encore reproduit, je creuserai davantage s'il le fait.
Je ne recommande pas de changer les paramètres SO. J'ai rencontré quelques problèmes (lag) après la modification du paramètre fs.inotify.max_user_watches car d'autres services seront en cours d'exécution ...
Le "ng serve --poll = 2000" est une bonne solution mais vous oublierez probablement ce paramètre ...
Recherche: https://github.com/angular/angular-cli/wiki/angular-cli J'avais fait la solution suivante.
Changé de angular.json avec le paramètre poll
"serve": {
"builder....
"options": {
"browserTarget": "xkcd:build",
"poll": 2000
}
...
Fonctionne sur ma machine: D
En cas d'échec, vérifiez que votre code ne contient pas d'erreurs de syntaxe, en particulier sur index.html
, ou sur des parties de votre code que vous avez récemment modifiées juste avant que cette mise à jour automatique ne soit interrompue. Les erreurs de syntaxe briseront cette fonctionnalité de mise à jour automatique dans Angular.
Dans mon cas, plusieurs projets étaient ouverts dans des fenêtres de code VS séparées. Sur tous mes autres projets, ng serve
a fonctionné comme prévu: il a été mis à jour automatiquement lors de la sauvegarde. Mais sur un projet, il faudrait une actualisation manuelle pour la mise à jour. En fin de compte, c'était parce que j'avais des commentaires HTML en dehors de la zone HTML définie du modèle (donc, les commentaires HTML venaient avant le <!doctype html>
). Il était donc invalide, car sa syntaxe HTML se trouvait en dehors d'une zone HTML.
J'ai effacé les commentaires et bam, la mise à jour automatique a recommencé à fonctionner (après une actualisation manuelle supplémentaire).
Alors, parcourez index.html
ou d’autres parties de votre code que vous avez récemment modifiées avant cette rupture et coupez une par une, coupez les parties fragmentaires, effectuez une actualisation dans le navigateur, puis revenez dans VS Code et effectuez une modification, enregistrez-la et voyez-la automatiquement mises à jour.