자동으로 파일 변경을 감지하지 못함


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
ng serve --watch 해보 셨나요?
planet_hunter 2018

2
예. 그러나 그것은 내 문제를 해결하지 못할
Bhaskararao Gummidi

업데이트 된 답변을 확인하고 문제가 해결되는지 알려주십시오.
planet_hunter 2018 년

-이 방법으로 시도 stackoverflow.com/a/42534127/1191125
zeleniy

답변:


151

대부분의 경우 Linux에서 ng serve또는 ng build --watch디렉토리에 충분한 권한이 없으면 작동하지 않습니다.

해결책은 필요한 권한을 제공하거나 sudo대신 사용하는 것입니다.

최신 정보

감시 플래그 ng serve는 기본 옵션이므로 실제로 중복됩니다. 실수를 지적한 @Zaphoid에게 감사드립니다.


29
감사합니다. 나는 실행 ng servesudo권한을 설정합니다. 작동했습니다.
Bhaskararao Gummidi

1
그런 다음, 나중에이 질문을 읽고 다른 사람을 도움이 될 것입니다 대답 함을 양해 해 주시기 바랍니다
Mawg는 분석 재개 모니카 말한다

3
@Mawg sudo를 사용하는 대신. 파일에 어떤 권한 세트가 있어야합니까?
oracleruiz

2
실행중인 사용자에 따라 a+x다르지만 sudo.이 아닌 권한 사용에 대해 경고 합니다. sudo단일 명령에 대한 것이지만 권한을 변경하면 영구적으로 변경되므로 더 큰 보안 누출로 보입니다.
Mawg는 Monica를 복원한다고 말합니다.

5
--watch기본값이므로 필요하지 않아야 합니다. angular.io/cli/serve를 참조 하세요 . 그래서 @T. van den Berg의 대답은 실제로 더 정확했습니다!
Zaphoid

126
ng serve --poll=2000

Linux 및 Windows에서 잘 작동


19
무슨 뜻입니까 (--poll)
HD ..

1
이것이 작동하는지 확인할 수 있습니다. Windows에서 실행되는 VS Code를 사용하여 WIndows 10 (Ubuntu)에서 Linux 하위 시스템을 실행합니다.
Ales Potocnik Hahonina

우분투 18.0.4에서 작동
Nishān Wickramarathna

2
우분투 18.04에서 작동했습니다. 그 이유를 설명해 주시겠습니까?
Vijender Kumar

2
나를 위해 잘 작동합니다! 하지만 "ng serve"가 프로젝트를 다시로드하지 않는 이유를 이해하지 못합니다.
José Luiz Gonzaga Neto

81

많은 수의 파일이있는 경우 Linux 에서 INotify Watches에 제한이 있음을 고려하십시오 . 예를 들어 시계 제한을 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-362728855https://github.com/guard/listen/wiki/Increasing-the-amount-를 확인할 수 있습니다. of-inotify-watchers


5
이것은 우분투 14에서 저에게 효과적이었습니다- "echo fs.inotify.max_user_watches = 524288 | sudo tee /etc/sysctl.d/40-max-user-watches.conf && sudo sysctl --system"
mahesh kajale

1
이 commmand를 사용하여 현재 시계 제한을 확인 / 테스트 할 수 있습니다. cat /proc/sys/fs/inotify/max_user_watches 위의 답변은 완전히 완전한 답변이지만 여기에 약간의 설명이있는 링크가 있습니다. confluence.jetbrains.com/display/IDEADEV/Inotify+Watches+Limit
Junaid

잘 작동했습니다. 일부 IDE (예 : JetBrains Webstorm)는 inotify를 사용하여 파일 변경 사항도 추적합니다. 따라서 5 개의 프로젝트를 열고 ng serve를 실행하는 경우이를 염두에 두십시오.
Multis

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는 티 -a /etc/sysctl.conf에 && sudo는 sysctl을 -p
바그너 다 실바

18

프로젝트에서 dist 폴더는 루트가 소유합니다.

sudo ng serve대신 사용하십시오 ng serve.

또 다른 해결책

많은 파일이있는 경우 Linux에서 작동하지 않는 것을보고 Linux에서 INotify Watches에 제한이 있습니다. 따라서 시계 제한을 늘리십시오.

//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 ng serve 를 실행하기 만하면 됩니다.


5
좋은 해결 방법이지만 왜 그렇게해야 하는가가 진짜 질문입니다 .... 루트로 실행하는 것은 모범 사례가 아닙니다 ...
Pipo

5

이것이 내가 가진 것과 같은 문제라면 도움이 될 수 있습니다. 사용을 시도 ng serve하고 ng build --watch때로는 작동했지만 대부분은 코드 변경을 감시하지 않았고 ng.

그러다가 inotify 시계를 사용 하면서 잠시 겪었던 문제가 생각났습니다.

나는 이것을 우분투 컴퓨터에서 실행했고 코드 변경을보고있는 것 같다 :

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

신용은 스콧 스미스 에게 간다


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

3

나를 위해 작동하지 않았다 :

ng serve --watch

시도해보십시오 :

sudo ng serve

이것은 나를 위해 일했습니다!


2

다른 모든 방법이 실패하면 코드에서 구문 오류를 확인하십시오. index.html 자동 업데이트가 중단되기 직전에 최근에 편집 한 코드의 일부 또는 . 구문 오류는 Angular에서이 자동 업데이트 기능을 손상시킵니다.

제 경우에는 별도의 VS 코드 창에서 여러 프로젝트를 열었습니다. 다른 모든 프로젝트에서 ng serve예상대로 작동했습니다. 저장시 자동으로 업데이트되었습니다. 그러나 한 프로젝트에서 업데이트하려면 수동으로 새로 고쳐야합니다. 템플릿의 정의 된 HTML 영역 외부에 html 주석이 있었기 때문에 종료되었습니다 (따라서 HTML 주석은 이전에 나왔습니다 <!doctype html>. 따라서 잘못된 bc 였고 HTML 영역 외부의 HTML 구문입니다.

나는 주석을 지우고 bam, 자동 업데이트가 다시 작동하기 시작했습니다 (한 번 더 수동 새로 고침 후).

따라서이 index.html문제가 발생하기 전에 최근에 편집 한 코드의 다른 부분을 살펴보고 하나씩 스케치 한 부분을 잘라 내고 브라우저에서 새로 고침을 수행 한 다음 VS Code로 돌아와 변경 한 다음 저장하고 자동 업데이트되는지 확인합니다. .


1
템플릿의 다른 오류로 인해 제대로 작동하지 않을 수도 있습니다. 제 경우에는를 예상하는 사용자 정의 구성 요소가 @Input()있었지만 속성은 다음과 같이 비어 [myInput]=""있습니다. 복원 된 값으로 채우고 ng serve수동 새로 고침이 필요하지 않습니다.
Zarepheth

2

프로젝트의 dist / 폴더가 루트 소유임을 발견했습니다. 그렇기 때문에 그렇지 않을 sudo ng serve때 변화를 보게됩니다 ng serve.

dist / 폴더를 제거하고 sudo rm -R dist/dev 서버를 시작하여 현재 사용자로 다시 빌드 ng serve하고 모두 다시 작동했습니다.


2

새로운 Linux Ubuntu 설치 에서이 문제가 발생했으며 동시에 VSCode에서 '너무 많은 감시자'에 대한 오류가 발생했습니다. 지침에 따라 VSCode에서 수정했으며 시계 문제도 해결했습니다. 자세한 정보는 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 패키지에 시스템에 대한 루트 액세스 권한을 부여합니다. 권한이 올 바르면 제한이 사용자 당이므로 내 문제가 해결 될 수 있으며 sudo로 실행하면 제한을 초과 한 현재 사용자 대신 루트로 실행됩니다 (vscode 또는 atom과 같은 watch heavy ide 실행). 의 위에 ). 어떤 이유로 잘못된 권한이있는 경우를 사용하여 사용자 / 그룹에 적절하게 설정하십시오 chown.


사용하는 제안에 대한 +1 chown대신 실행 ng servesudo반드시 피해야한다!
Tobi

1

나는 똑같은 문제가 있었고, 사용 sudo ng serve은 불만족스럽게 문제를 "해결"하는 것처럼 보였다. 사용sudoIMO를 하는 것은 만족스럽지 않습니다.

다음을 사용하여 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 다음 솔루션을 수행했습니다.

poll 매개 변수로 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얼마 후 변경 사항을 감지하지 못합니다. 이 문제를 조사하는 것보다 할 일이 더 많으므로이 솔루션이 필요합니다.
Andrei Sinitson

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에 로그온 한 사용자에게 읽기 / 쓰기 권한을 부여하여 수정되었습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.