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
каждый раз, когда вы хотите запустить свой угловой проект.
Ответ 13
Я столкнулся с той же проблемой, что и проблема наблюдателя для меня
https://github.com/angular/angular-cli/issues/8054#issuecomment-336615324
Ответ 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).