ng serve no detecta cambios de archivo automáticamente

110

Necesito ejecutar ng servecada vez que se realicen cambios en los archivos de origen. No tengo ningún error en la consola.

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
fuente
2
¿Probaste ng serve --watch?
planet_hunter
2
Si. Pero no resolvió mi problema
Bhaskararao Gummidi
Verifique mi respuesta actualizada y avíseme si resuelve el problema.
planet_hunter
Pruebe de esta manera - stackoverflow.com/a/42534127/1191125
zeleniy

Respuestas:

151

La mayoría de las veces en Linux, ng serveo ng build --watchno funciona si el directorio no tiene suficientes permisos.

La solución es proporcionar los permisos necesarios o utilizarlos sudoen su lugar.

ACTUALIZAR

watch flag in ng servees realmente redundante, ya que es la opción predeterminada. Gracias a @Zaphoid por señalar el error.

cazador de planetas
fuente
29
Gracias. Corro ng servecon sudopermisos. Ha funcionado.
Bhaskararao Gummidi
1
Entonces, acepte esto como la respuesta, lo que ayudará a otros que lean esta pregunta en el futuro
Mawg dice que restablezca a Monica
3
@Mawg En lugar de usar sudo. ¿Qué conjunto de permisos deberían tener los archivos?
oráculoruiz
2
Depende del usuario que esté ejecutando, tal vez tanto como a+x, pero advierto contra el uso de permisos, en lugar de sudo. sudoes para un solo comando, mientras que cambiar los permisos los cambia para siempre, lo que parece una mayor fuga de seguridad.
Mawg dice reinstalar a Monica
5
--watchno debería ser necesario, ya que es un valor predeterminado, consulte angular.io/cli/serve . Entonces @T. ¡La respuesta de van den Berg fue en realidad más precisa!
Zaphoid
126
ng serve --poll=2000

Funciona bien en Linux y Windows

Dhandapani Loganathan
fuente
19
¿Qué significa? (--poll)
HD ..
1
Puedo confirmar que esto funciona. Ejecutando el subsistema linux en Windows 10 (Ubuntu) con VS Code ejecutándose en Windows.
Ales Potocnik Hahonina
Funciona en ubuntu 18.0.4
Nishān Wickramarathna
2
Eso funcionó en ubuntu 18.04. ¿puede describir su razón?
Vijender Kumar
2
¡Para mí funciona bien! Pero, no entiendo la causa "ng serve" no recarga el proyecto.
José Luiz Gonzaga Neto
81

Tenga en cuenta que, al tener una gran cantidad de archivos, existe un límite en INotify Watches en Linux. Entonces, aumentar el límite de relojes a 512K, por ejemplo, puede resolver esto.

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

Tenga en cuenta que lo anterior provoca un cambio en la memoria que perderá después de reiniciar.

Sin embargo, puede hacerlo persistente ejecutando:

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

Como referencia, puede consultar: https://github.com/angular/angular-cli/issues/8313#issuecomment-362728855 y https://github.com/guard/listen/wiki/Increasing-the-amount- de-inotificar-observadores

Muhammad Altabba
fuente
5
Esto funcionó para mí en 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
puede usar este comando para verificar / probar el límite de reloj actual La cat /proc/sys/fs/inotify/max_user_watches respuesta anterior es una respuesta totalmente completa, pero aquí hay un enlace con un poco más de descripción confluence.jetbrains.com/display/IDEADEV/Inotify+Watches+Limit
Junaid
funcionó bien. Vale la pena señalar que algunos IDE (como JetBrains Webstorm) también utilizan inotify para realizar un seguimiento de los cambios en los archivos. por lo tanto, téngalo en cuenta si abre 5 proyectos y luego ejecuta serve.
Multis
25

Por eso, el sistema que detecta cambios no puede manejar tantos relojes por defecto.

Y la solución es change the amount of watchesque puede manejar (la cantidad máxima de archivos que habrá en el proyecto) debe run this command:

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

El problema con inotify es restablecer este contador cada vez que reinicia su computadora.

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

En su proyecto, la carpeta dist es propiedad de root

Intente usar en sudo ng servelugar de ng serve.

Otra solución

Cuando hay una gran cantidad de archivos, el reloj no funciona en Linux. Hay un límite en INotify Watches en Linux. Entonces aumentando el límite de relojes

//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
fuente
8

Solo necesita ejecutar sudo ng serve para resolver el problema.

Sandeep Mishra
fuente
5
Buena solución, pero por qué tener que hacerlo es la verdadera pregunta ... ejecutar como root no es la mejor práctica ...
Pipo
5

Esto puede ayudar si es el mismo problema que tuve. Intenté usarlo ng servey, a ng build --watchveces, funcionó, pero en su mayoría no estaban atentos a los cambios de código y pensé que tenía algo que ver con eso ng.

Entonces recordé un problema que tuve hace un tiempo con los relojes inotify

Ejecuté esto en mi máquina Ubuntu y parece haberse activado y viendo cambios de código:

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

el crédito es para Scott Smith

arul murugan
fuente
3

prueba esto. Si lo hace así, no necesita disparar siempre ningún comando.Necesita disparar solo una vez.

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
fuente
3

No funcionó para mí:

ng serve --watch

Tratar :

sudo ng serve

esto funcionó para mí!

Sahil Ralkar
fuente
2

Si todo lo demás falla, verifique su código en busca de errores de sintaxis, particularmente en index.htmlpartes de su código que editó recientemente justo antes de que se rompiera esta actualización automática. Los errores de sintaxis romperán esta funcionalidad de actualización automática en Angular.

En mi caso, tenía varios proyectos abiertos en ventanas de VS Code separadas. En todos mis otros proyectos, ng servefuncionó como se esperaba: se actualizó automáticamente al guardar. Pero en un proyecto, requeriría una actualización manual para actualizar. Terminó siendo porque tenía comentarios html fuera del área HTML definida de la plantilla (por lo tanto, los comentarios HTML vinieron antes <!doctype html>. Por lo tanto, no era válido porque su sintaxis HTML está fuera de un área HTML.

Borré los comentarios y bam, la actualización automática comenzó a funcionar nuevamente (después de una actualización manual más).

Así que revise index.htmlu otras partes de su código que editó recientemente antes de que esto se rompiera y una por una, corte las partes incompletas, actualice el navegador, luego regrese a VS Code y haga un cambio, guarde y vea si se actualiza automáticamente .

Kyle Vassella
fuente
1
Otros errores con la plantilla también pueden impedir que funcione correctamente. En mi caso, tenía la costumbre componente esperando una @Input(), pero el atributo estaba en blanco, como esto: [myInput]="". Llenarlo con un valor restaurado ng serve, no requiere actualización manual.
Zarepheth
2

Descubrí que la carpeta dist / en el proyecto era propiedad de root. Es por eso sudo ng serveque ve los cambios cuando ng serveno.

Eliminé la carpeta dist / sudo rm -R dist/y la reconstruí como usuario actual iniciando el servidor de desarrollo ng servey todo funcionó nuevamente.

T. van den Berg
fuente
2

Tenía este problema en una nueva instalación de Linux Ubuntu y noté que recibía un error sobre 'demasiados observadores para el límite' en VSCode al mismo tiempo. Seguí las instrucciones para solucionarlo en VSCode y también solucionó el problema con ng watch. Más información aquí https://code.visualstudio.com/docs/setup/linux#_visual-studio-code-is-unable-to-watch-for-file-changes-in-this-large-workspace-error-enospc

Me di cuenta de que la gente sugirió sudocorrer a vigilar. Este es un juego peligroso, le está dando a los paquetes npm acceso root a su sistema. Si sus permisos son correctos, mi problema podría ser su solución, ya que el límite es por usuario, y al ejecutar sudo, se está ejecutando como root en lugar de su usuario actual que ha superado el límite (ejecutando un ide pesado como vscode o atom en ). Si por alguna razón tiene los permisos incorrectos, configúrelos correctamente para su usuario / grupo con chown.

Spera
fuente
1 por sugerir a utilizar chownen lugar de correr ng servecon el sudo, lo que debe evitarse por todos los medios!
Tobi
1

Tuve el mismo problema, el uso sudo ng servepareció "resolver" el problema de manera insatisfactoria. El uso sudono es satisfactorio en mi opinión.

Verifiqué mi recuento de INotify versus mi límite predeterminado (8192) usando: lsof | grep inotify | wc -l El valor devuelto por el comando anterior era mucho menor que el límite. Entonces, la solución INotify no pareció aplicarse a mi problema.

También verifiqué los permisos y la propiedad, ambos parecían estar bien, comparables a otro proyecto que funcionó.

Frustrado reinicié VS Code. Básicamente, cerré todas las instancias, tenía dos en ejecución y las volví a abrir, después de lo cual el problema desapareció.

Me estoy inclinando hacia un posible error en alguna parte. Esto es algo a considerar antes de darle la vuelta a su sistema. Afortunadamente / Desafortunadamente, este problema no ha vuelto a ocurrir, profundizaré más si lo hace.

Donovan
fuente
1

Puedes probar esto también.

sudo ng serve
Gurpreet Singh
fuente
1

No recomiendo cambiar los parámetros de SO. He experimentado algunos problemas (lag) después de cambiar el parámetro fs.inotify.max_user_watches ya que tendrá otros servicios en ejecución ...

El "ng serve --poll = 2000" es una buena solución pero probablemente olvide este parámetro ...

Investigando: https://github.com/angular/angular-cli/wiki/angular-cli Hice la siguiente solución.

Se cambió de angular.json con el parámetro de encuesta.

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

Funciona en mi máquina: D

wdavilaneto
fuente
¡Gracias! Esta es la manera ad hoc para ejecutarlo sin modificar los archivos de configuración: npm run ng serve -- --poll=2000. Esto no es tan bueno como la detección de cambios de archivos, pero simplemente funciona en mi máquina (versión corporativa de Ubuntu 18.04). Tengo max_user_watches configurado en 524288, pero ng serveaún no puedo detectar cambios después de un tiempo. Tengo mejores cosas que hacer que investigar esto, así que esta solución es justo lo que necesito.
Andrei Sinitson
1

Hacer el sudo ng servecomando es una mala práctica. Tienes que cambiar el npmpermiso para que cada vez que tengas que instalar alguno npm packagesno tengas que usarlo sudo.

Este enlace puede resolver cómo cambiar el permiso npm para el usuario actual y después de seguir estos pasos después de configurar el permiso npm, puede eliminar la node_modulescarpeta del directorio de su proyecto y usar npm install. Una vez completada la instalación de los paquetes, puede ejecutar ng servey no tiene que hacerlo sudo ng servecada vez que desee ejecutar su proyecto angular.


fuente
1

para ventana -

c:\>ng serve --open

Para Linux -

$sudo ng serve --open
Pravind Kumar
fuente
0

Mi respuesta puede no ser útil. pero busco esta pregunta por esto.

Después de comprar una computadora nueva, olvido configurar el guardado automático en el editor. Por lo tanto, el código se mantiene sin cambios.

Kenneth Chan
fuente
0

Me gustaría dejar mi caso aquí, solo como referencia. En mi caso, el problema estaba en los permisos del sistema. Usé una carpeta compartida dentro de una máquina virtual como repositorio. No tenía otro mensaje como permiso denegado o algo así. Probé todo y luego me di cuenta de que estaba usando una unidad de red.

Tsakiroglou Fotis
fuente
0

Reiniciar el servidor funcionó para mí.

Beatriz
fuente
0

Dar permiso completo para la carpeta del proyecto funcionó para mí

Mohammed Muzammil
fuente
0

En mi caso en Mac, se solucionó otorgando permiso de lectura / escritura al usuario que inició sesión en / usr / local / lib

Pavel Popov
fuente