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

Мне нужно запускать 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

person Bhaskararao Gummidi    schedule 04.01.2018    source источник
comment
Вы пробовали ng serve --watch ?   -  person planet_hunter    schedule 04.01.2018
comment
да. Но это не решило мою проблему   -  person Bhaskararao Gummidi    schedule 04.01.2018
comment
Пожалуйста, проверьте мой обновленный ответ и дайте мне знать, решит ли он проблему.   -  person planet_hunter    schedule 04.01.2018
comment
Попробуйте так: stackoverflow.com/a/42534127/1191125   -  person zeleniy    schedule 01.02.2019


Ответы (25)


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

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

ОБНОВЛЕНИЕ

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

person planet_hunter    schedule 04.01.2018
comment
Тогда, пожалуйста, примите это как ответ, который поможет другим, кто прочитает этот вопрос в будущем. - person Mawg says reinstate Monica; 04.01.2018
comment
@Mawg Вместо использования sudo. Какой набор разрешений должен быть у файлов? - person oracleruiz; 18.05.2018
comment
Зависит от пользователя, который работает, может быть, a+x, но я предостерегаю от использования разрешений, а не sudo. sudo предназначен для одной команды, тогда как изменение разрешений меняет их навсегда, что кажется большей утечкой безопасности. - person Mawg says reinstate Monica; 18.05.2018
comment
фкн разрешения. Спасибо чувак! - person tarasikarius; 25.09.2018
comment
--watch не обязательно, так как это значение по умолчанию, см. angular.io/cli/serve. Так что @Т. Ответ ван ден Берга был на самом деле более точным! - person Zaphoid; 20.10.2018
comment
Это хороший улов @Zaphoid! Ответ на самом деле был направлен как на обслуживание, так и на сборку, поскольку люди, как правило, сталкиваются с одной и той же проблемой в случае ng build. Однако я полностью упустил тот факт, что ng serve на самом деле смотрит по умолчанию. Спасибо! - person planet_hunter; 20.10.2018
comment
Я дал каталог + rwx, но все еще имеет ту же проблему, какие именно необходимые разрешения я должен предоставить?! - person Tawfiek Khalaf; 25.10.2018
comment
Какие соответствующие разрешения необходимо предоставить пользователю? В идеале административное развитие не должно осуществляться везде, где это возможно. - person NitinSingh; 16.01.2020
comment
@MawgsaysreinstateMonica Поскольку ng serve используется почти исключительно для целей разработки, я думаю, что проблема безопасности не должна быть большой проблемой (если дело находится в состоянии prod, нам нужно пересмотреть) - person Dame Lyngdoh; 02.03.2020

ng serve --poll=2000

Работает нормально в линуксе и винде

person Dhandapani Loganathan    schedule 23.04.2018
comment
что это значит (--опрос) - person HD..; 06.08.2018
comment
Могу подтвердить, что это работает. Запуск подсистемы Linux в WIndows 10 (Ubuntu) с VS Code, работающим в Windows. - person Ales Potocnik Hahonina; 27.12.2018
comment
Работает на убунту 18.0.4 - person NishanW; 27.02.2019
comment
Это работало на Ubuntu 18.04. не могли бы вы описать его причину? - person Vijender Kumar; 16.01.2020
comment
Для меня работает нормально! Но я не понимаю, почему ng serve не перезагружает проект. - person Gonzaga Neto; 22.03.2020
comment
Работаю на виндовс7 - person Code_Yoga; 07.04.2020
comment
Да, отлично. спасибо .. это также сработало для меня. я использую убунту 18.04 - person nur zazin; 12.04.2020
comment
Работает в WSL (Windows 10) - person Remy Ticona; 27.11.2020
comment
@HD .. Для чего это стоит --poll позволяет изменить поведение того, какая файловая система проверяется, путем определения частоты опроса. По умолчанию ng проверит собственный код, который может не работать должным образом при использовании WSL1/2, общих файловых систем и т. д. см. angular.io/cli/serve и stackoverflow.com/questions/51930195/. - person Daileyo; 23.04.2021
comment
Работает на меня. Я использую Debian GNU/Linux 9 в докере. - person sheucm; 29.04.2021

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

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

person Muhammad Altabba    schedule 21.05.2018
comment
Это сработало для меня на Ubuntu 14 - echo fs.inotify.max_user_watches=524288 | sudo tee /etc/sysctl.d/40-max-user-watches.conf && sudo sysctl --system - person mahesh kajale; 15.11.2018
comment
вы можете использовать эту команду, чтобы проверить/проверить текущий предел просмотра cat /proc/sys/fs/inotify/max_user_watches Вышеприведенный ответ является полностью полным ответом, но вот ссылка с небольшим описанием confluence.jetbrains.com/display/IDEADEV/Inotify+Watches+Limit - person Junaid; 09.10.2019
comment
работал нормально. Стоит отметить, что некоторые IDE (например, JetBrains Webstorm) также используют inotify для отслеживания изменений файлов. поэтому имейте это в виду, если вы откроете 5 проектов, а затем запустите ng serve. - person Multis; 24.05.2020

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

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

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

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

person Chintan Kotadiya    schedule 01.03.2018
comment
эхо fs.inotify.max_user_watches=524288 | sudo tee -a /etc/sysctl.conf && sudo sysctl -p - person Wagner Danda da Silva Filho; 01.03.2018

В вашем проекте папка dist принадлежит root

Попробуйте использовать 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**
person Bijay Pal    schedule 13.12.2018

Нужно только запустить sudo ng serve для решения проблемы.

person Sandeep Mishra    schedule 21.03.2018
comment
Хороший обходной путь, но почему это нужно делать, это реальный вопрос ... запуск от имени пользователя root - не лучшая практика ... - person Pipo; 17.08.2018

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

Затем я вспомнил о проблеме, которая возникла у меня некоторое время назад с часами inotify.

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

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

кредит принадлежит Скотту Смиту

person arul murugan    schedule 05.02.2019

попробуй это. Если вы сделаете так, вам не нужно постоянно запускать любую команду. Вам нужно запускать только один раз.

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
person Suhag Lapani88    schedule 15.11.2019

У меня не сработало:

ng serve --watch

Пытаться :

sudo ng serve

это сработало для меня!

person Sahil Ralkar    schedule 28.11.2019

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

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

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

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

person Kyle Vassella    schedule 01.04.2018
comment
Другие ошибки с шаблоном также могут помешать его правильной работе. В моем случае у меня был пользовательский компонент, ожидающий @Input(), но атрибут был пустым, например: [myInput]="". Заполнение его восстановленным значением ng serve, ручное обновление не требуется. - person Zarepheth; 30.07.2019

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

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

person T. van den Berg    schedule 04.10.2018

У меня возникла эта проблема при новой установке 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, а не от текущего пользователя, который превышает ограничение (запуск тяжелого ide, такого как vscode или atom на ). Если по какой-то причине у вас неправильные разрешения, установите их правильно для вашего пользователя/группы с помощью chown.

person Spera    schedule 15.01.2019
comment
+1 за предложение использовать chown вместо запуска ng serve с sudo, чего следует избегать всеми средствами! - person Tobi; 11.02.2019

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

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

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

Изменен файл angular.json с параметром опроса.

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

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

person wdavilaneto    schedule 17.04.2019
comment
Спасибо! Это специальный способ запустить его без изменения файлов конфигурации: npm run ng serve -- --poll=2000. Это не так хорошо, как обнаружение изменений файлов, но просто работает на моей машине (корпоративный вариант Ubuntu 18.04). У меня для max_user_watches установлено значение 524288, но ng serve по-прежнему не может обнаружить изменения через некоторое время. У меня есть дела поважнее, чем исследовать это, так что это решение как раз то, что мне нужно. - person Andrei Sinitson; 21.05.2020
comment
Спасибо !, только что добавил опрос: 2000 в angular.json и работает хорошо - person Kishan Chauhan; 01.10.2020

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

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

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

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

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

person Donovan    schedule 03.01.2019

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

sudo ng serve
person Gurpreet Singh    schedule 24.01.2019

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

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

person Community    schedule 14.06.2019

для окна -

c:\>ng serve --open

Для линукса -

$sudo ng serve --open
person Pravind Kumar    schedule 23.05.2020

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

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

person Kenneth Chan    schedule 01.09.2019

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

person Tsakiroglou Fotis    schedule 23.09.2019

Мне помог перезапуск сервера.

person Beatrice    schedule 10.10.2019

Предоставление полного разрешения для папки проекта сработало для меня

person Mohammed Muzammil    schedule 18.06.2020

В моем случае на Mac это было исправлено путем предоставления разрешения на чтение/запись вошедшему в систему пользователю в /usr/local/lib

person Pavel Popov    schedule 19.06.2020

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

Вы можете сделать это с помощью: chown -R username:groupname *

Если вы хотите узнать, что именно делает эта команда, проверьте:

https://superuser.com/questions/462141/how-to-chown-chmod-all-files-in-current-directory

person Jamie    schedule 27.10.2020

используйте sudo перед ng serve, это сработает. В терминале введите: «sudo ng serve»

person Maddy    schedule 12.01.2021

Для меня сработало:

rm -rf node_modules && npm install

А потом

ng serve

person Dalorzo    schedule 28.08.2020