Ng не удается автоматически обнаружить изменения файла

Мне нужно запускать ng serve каждый раз, когда любые изменения, внесенные в исходные файлы. У меня нет ошибки в консоли.

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

Ответ 1

В большинстве случаев в Linux ng serve --watch или ng build --watch не работают, если каталог не имеет достаточных разрешений.

Решением является либо предоставление необходимых разрешений, либо использование вместо этого sudo.

ОБНОВИТЬ

Флаг наблюдения в ng serve фактически избыточен, поскольку это опция по умолчанию. Благодарим @Zaphoid за указание на ошибку.

Ответ 2

ng serve --poll=2000

Работает нормально в Linux и Windows

Ответ 3

Учтите, что при наличии большого количества файлов существует ограничение на INotify Watches в Linux. Так, например, увеличение предела часов до 512 КБ может решить эту проблему.

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

Обратите внимание, что предыдущий вызывает изменение в памяти, которое вы потеряете после перезапуска.

Однако вы можете сделать его постоянным, выполнив:

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

В качестве справки вы можете проверить: https://github.com/angular/angular-cli/issues/8313#issuecomment-362728855 иhttps://github.com/guard/listen/wiki/Increasing-the-amount-of-inotify-watchers

Ответ 4

Из-за того, что система, обнаруживающая изменения, не может обрабатывать так много часов по умолчанию.

И решение будет change the amount of watches, которое может обрабатывать (максимальное количество файлов, которые будут в проекте), вы должны run this command:

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

Проблема с inotify перезаписывает этот счетчик каждый раз, когда вы перезагружаете компьютер.

Ответ 5

В вашем проекте папка dist является корневой

Попробуйте использовать sudo ng serve вместо ng serve.

Другое решение

Когда есть большое количество файлов, часы не работают в linux. Существует ограничение на INotify Watches в Linux. Таким образом, увеличение лимита часов

//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**

Ответ 6

для людей, которые используют Windows команда ng serve --poll = 2000 тоже работает.

ng serve --poll=2000

Ответ 7

Для устранения проблемы нужно выполнить только sudo.

Ответ 8

Это может помочь, если это та же проблема, что и у меня. Попытки использовать ng serve и ng build --watch иногда работали, но в основном они не наблюдали за изменениями кода, и я подумал, что это как-то связано с ng.

Потом я вспомнил проблему, с которой я некоторое время назад уведомлять часы

Я запустил это на своем компьютере с Ubuntu, и он, похоже, включился и наблюдал за изменениями кода:

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

кредит идет на Скотта Смита

Ответ 9

Я обнаружил, что папка dist/в проекте принадлежит пользователю root. Вот почему sudo ng serve видит изменения, а ng serve - нет.

Я удалил dist/folder sudo rm -R dist/ и перестроил его как текущего пользователя, запустив dev server ng serve и все снова sudo rm -R dist/.

Ответ 10

Если все остальное не удается, проверьте свой код на синтаксические ошибки, особенно на index.html, или на части кода, которые вы недавно редактировали, прежде чем это автоматическое обновление сломалось. Синтаксические ошибки нарушают эту функцию автоматического обновления в Angular.

В моем случае у меня было несколько проектов, открытых в отдельных окнах VS Code. Во всех моих других проектах ng serve работал так, как ожидалось: он автоматически обновляется при сохранении. Но для одного проекта потребуется обновление вручную для обновления. Это закончилось тем, что у меня были html-комментарии за пределами определенной HTML-области шаблона (так что комментарии HTML появились до <!doctype html>. Таким образом, это было недопустимым синтаксисом HTML в HTML за пределами области HTML.

Я удалил комментарии и bam, автоматическое обновление снова заработало (после еще одного обновления вручную).

Итак, переходите через index.html или другие части вашего кода, которые вы недавно редактировали до того, как это сломалось, и один за другим, вырезали отрывочные части, обновили в браузере, затем вернулись к VS Code и внесли изменения, сохранили и посмотреть, будет ли оно автоматически обновляться.

Ответ 11

Я столкнулся с этой проблемой при новой установке Linux Ubuntu и заметил, что одновременно получаю сообщение об ошибке "слишком много наблюдателей для ограничения" в VSCode. Я следовал инструкциям, чтобы исправить это в VSCode, и это также исправило проблему с ng watch. Более подробная информация здесь https://code.visualstudio.com/docs/setup/linux#_visual-studio-code-is-unable-to-watch-for-file-changes-in-this-large-workspace-error-enospc

Я заметил людей, предлагающих sudo бегать смотреть. Это опасная игра, вы даете пакетам npm root доступ к вашей системе. Если ваши права доступа верны, моя проблема может заключаться в том, что вы исправляете ограничение, так как ограничение на пользователя, и при запуске от имени sudo вы работаете от имени пользователя root, а не от текущего пользователя, который превысил ограничение (выполняя тяжелый идеал, такой как vscode или atom на). Если по какой-то причине у вас неправильные разрешения, установите их правильно для вашего пользователя/группы с помощью chown.

Ответ 12

Выполнение команды sudo ng serve - плохая практика. Вы должны изменить разрешение npm чтобы каждый раз, когда вам приходилось устанавливать некоторые npm packages вам не приходилось использовать sudo.

Эта ссылка может решить, как изменить разрешение npm для текущего пользователя, и после выполнения этих шагов после установки разрешения npm вы можете удалить папку node_modules из каталога вашего проекта и использовать npm install. После завершения установки пакетов вы можете запустить ng serve и вам не нужно выполнять sudo ng serve каждый раз, когда вы хотите запустить свой угловой проект.

Ответ 14

У меня была та же проблема: использование sudo ng serve казалось, "решило" проблему неудовлетворительно. Использование sudo не является удовлетворительным IMO.

Я проверил мой счет INotify в сравнении с моим пределом по умолчанию (8192), используя: lsof | grep inotify | wc -l lsof | grep inotify | wc -l lsof | grep inotify | wc -l Значение, возвращенное вышеупомянутой командой, было намного меньше, чем предел. Таким образом, решение INotify, похоже, не относится к моей проблеме.

Я также проверил права доступа и владельца, оба казались в порядке, сравнимые с другим работающим проектом.

Из-за разочарования я перезапустил VS Code. По сути, я закрыл все экземпляры, у меня было два запущенных и повторно открыли оба, после чего проблема ушла.

Я склоняюсь к возможной ошибке где-то. Это то, что нужно учитывать, прежде чем вывернуть вашу систему наизнанку. К счастью/к сожалению, эта проблема не возникла снова, я буду копать глубже, если это произойдет.

Ответ 15

Вы можете попробовать это тоже.

sudo ng serve

Ответ 16

Перезапуск кода VS может помочь.

Ответ 17

Я не рекомендую изменять параметры SO. После изменения параметра fs.inotify.max_user_watches у меня возникли некоторые (задержки) проблемы, поскольку у вас будут запущены другие службы...

"Ng serve --poll = 2000" - хорошее решение, но вы, вероятно, забудете этот параметр...

Расследование: https://github.com/angular/angular-cli/wiki/angular-cli Я сделал следующее решение.

Изменен de angular.json с параметром опроса

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

Работает на моей машине: D

Ответ 18

некоторое время автоматическое обновление не работает, поэтому вы можете принудительно выполнить команду ng serve с помощью sudo перед командой. как: sudo ng serve.

после этого вам не нужно будет компилировать код после каждого сохранения.

Ответ 19

Мой ответ не может быть полезным. но я ищу этот вопрос из-за этого.

После того, как я купил новый компьютер, я забываю установить автосохранение в редакторе. Поэтому код фактически остается неизменным.

Ответ 20

Я хотел бы оставить свое дело здесь, просто для справки. В моем случае проблема была в системных разрешениях. Я использовал общую папку внутри виртуальной машины в качестве репозитория. У меня не было другого сообщения, например, отказано в разрешении или что-то еще. Перепробовал все и тогда я просто понял, что использую сетевой диск.

Ответ 21

Перезапуск сервера работал у меня.

Ответ 22

Если вы используете WebStorm IDE, после внесения изменений используйте Save All (Ctrl + s).