ng не автоматично визначає зміни файлів


110

Мені потрібно запускати 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

2
Ви спробували послужити - спостерігати?
planet_hunter

2
Так. Але це не
вирішило

Будь ласка, перевірте мою оновлену відповідь і повідомте мені, чи вирішує вона проблему.
planet_hunter

Спробуйте цей спосіб - stackoverflow.com/a/42534127/1191125
Зелений

Відповіді:


151

Більшість випадків в Linux ng serveабо ng build --watchне працює, якщо каталог не має достатнього дозволу.

Рішення - або надати необхідні дозволи, або використовувати sudoзамість цього.

ОНОВЛЕННЯ

Прапор годинника ng serveнасправді зайвий, оскільки це параметр за замовчуванням. Заплачуємо @Zaphoid за вказівку на помилку.


29
Дякую. Я бігаю ng serveз sudoдозволами. Це спрацювало.
Bhaskararao Gummidi

1
Тоді прийміть це як відповідь, яка допоможе іншим, хто читає це питання в майбутньому,
Мауг каже, що відновити Моніку

3
@Mawg Замість використання sudo. Який набір дозволів повинні мати файли?
oracleruiz

2
Залежить від користувача, який працює, можливо, стільки ж a+x, але я застерігаю від використання дозволів, а не sudo. sudoє для однієї команди, тоді як зміна дозволів змінює їх назавжди, що здається більшим витоком безпеки.
Мауг каже, що повернемо Моніку

5
--watchне повинен бути необхідним, оскільки це за замовчуванням, див. angular.io/cli/serve . Так @T. Відповідь ван ден Берга була насправді точнішою!
Зафоїд

126
ng serve --poll=2000

Добре працює в Linux та Windows


19
що це означає (- опитування)
HD ..

1
Можна підтвердити це. Запуск підсистеми Linux на WIndows 10 (Ubuntu) з кодом VS, що працює в Windows.
Алесь Поточник Гахоніна

Працює над ubuntu 18.0.4
Nishān Wickramarathna

2
Це працювало на ubuntu 18.04. ви можете, будь ласка, описати його причину?
Вієндер Кумар

2
Для мене прекрасно працює! Але я не розумію причини "не служити" не перезавантажувати проект.
Хосе Луїс Гонзага Нето

81

Врахуйте, що при наявності великої кількості файлів існує обмеження на 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/isissue/8313#issuecomment-362728855 та https://github.com/guard/listen/wiki/Increasing-the-amount- з-прищеплювати-спостерігачів


5
Це працювало для мене на 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
Ви можете скористатися цією командою для перевірки / перевірки поточної межі перегляду. cat /proc/sys/fs/inotify/max_user_watches Вище відповідь є цілком повною відповіддю, але ось посилання з трохи більше опису confluence.jetbrains.com/display/IDEADEV/Inotify+Watches+Limit
Junaid

добре працював. Варто зазначити, що деякі IDE (наприклад, JetBrains Webstorm) використовують inotify для відстеження змін файлів. тож майте на увазі, якщо ви відкриєте 5 проектів і не будете виконувати службу.
Мультис

25

Через те, що система, яка виявляє зміни, не може обробляти стільки годин за замовчуванням.

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

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

Проблема з inotify полягає в тому, що кожен лічильник перезавантажує цей лічильник під час перезавантаження комп'ютера.


5
echo fs.inotify.max_user_watches = 524288 | sudo tee -a /etc/sysctl.conf && sudo sysctl -p
Вагнер да Сілва

18

У вашому проекті 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**

8

Тільки потрібно запустити Sudo нг служать для вирішення цієї проблеми.


5
Хороший спосіб вирішення, але чому це потрібно робити, це справжнє питання .... працювати як root - не найкраща практика ...
Pipo

5

Це може допомогти, якщо це та сама проблема, яку я мав. Намагалися використовувати, 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 --система

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


3

спробуйте це. Якщо ви робите це так, вам не потрібно запускати завжди будь-яку команду. Стріляти потрібно лише один раз

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


2

Якщо все інше не вдається, перевірте свій код на наявність синтаксичних помилок - особливо на index.htmlчастинах чи ваших кодах, які ви нещодавно відредагували, перед тим, як відбулося автоматичне оновлення. Помилки синтаксису порушують цю функцію автоматичного оновлення в Angular.

У моєму випадку у мене було відкрито кілька проектів в окремих вікнах VS Code. На всіх інших моїх проектах ng serveпрацювали так, як очікувалося: він автоматично оновлювався при збереженні. Але для одного проекту потрібно буде оновити вручну оновлення. Це в кінцевому підсумку тому, що у мене були коментарі html за межами визначеної області HTML шаблону (так, коментарі HTML були раніше <!doctype html>. Отже, це недійсний bc - це синтаксис HTML за межами області HTML.

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

Тому перегляньте index.htmlабо інші частини коду, які ви нещодавно відредагували, перш ніж це зламалося, і одну за одною, виріжте схематичні частини, зробіть оновлення в браузері, а потім поверніться до коду VS та внесіть зміни, збережіть і подивіться, чи він автоматично оновлюється. .


1
Інші помилки з шаблоном також можуть заважати йому працювати належним чином. У моєму випадку, я повинен був призначений для користувача компонент очікує @Input(), але атрибут був порожнім, як це: [myInput]="". Заповнивши його відновленим значенням ng serve, оновлення вручну не потрібно.
Зарефет

2

Я виявив, що dist / папка в проекті належить root. Ось чому sudo ng serveбачить зміни, коли ng serveцього не відбувається.

Я видалив dist / folder sudo rm -R dist/і відновив його як поточний користувач, запустивши сервер розробників, ng serveі все працювало заново.


2

У мене виникала ця проблема при новій установці 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.


+1 за пропозицію використовувати chownзамість запуску ng serveз sudo, чого слід уникати всіма засобами!
Тобі

1

У мене була така ж проблема, використовуючи, sudo ng serveздавалося, "незадовільно" вирішити проблему. Використання sudoІМО не задовільне.

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

Я також перевірив дозволи та права власності, обидва видалися нормальними, порівняними з іншим проектом, який працював.

Від розчарування я перезапустив VS Code. В основному я закрив усі екземпляри, у мене було два запущені і знову відкриті обидва, після чого проблема пішла.

Я кудись схиляюся до можливої ​​помилки. Це те, що слід врахувати, перш ніж перевертати систему назовні. На щастя / На жаль, ця проблема не повторилася, я копаю глибше, якщо це станеться.



1

Я не рекомендую змінювати параметри 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


Дякую! Це спеціальний спосіб запустити його без зміни конфігураційних файлів: npm run ng serve -- --poll=2000. Це не так приємно, як виявлення зміни файлів, але просто працює на моїй машині (фірмовий смак Ubuntu 18.04). У мене max_user_watches встановлено на 524288, але ng serveвсе-таки не вдається виявити зміни через деякий час. У мене є кращі справи, ніж розслідування цього, тому це рішення - саме те, що мені потрібно.
Андрій Синісон

1

Виконувати sudo ng serveкоманду - погана практика. Ви повинні змінити npmдозвіл, щоб кожен раз, якщо вам доведеться встановлювати деякі, npm packagesвам не доведеться користуватися sudo.

Це посилання може вирішити, як змінити дозвіл npm на поточного користувача і після виконання цих кроків після встановлення дозволу npm ви можете видалити node_modulesпапку з каталогу проектів та використовувати npm install. Після завершення установки пакетів ви можете запустити, ng serveі вам не потрібно робити sudo ng serveщоразу, коли ви хочете запустити свій кутовий проект.



0

Моя відповідь може бути не корисною. але я шукаю це питання через це.

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


0

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




0

У моєму випадку на Mac це було виправлено шляхом надання дозволу читання / запису для входу в систему до / usr / local / lib

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.