Muszę uruchamiać się za ng serve
każdym razem, gdy wprowadzono jakiekolwiek zmiany w plikach źródłowych.Nie mam błędu w konsoli.
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
Odpowiedzi:
W większości przypadków w systemie Linux
ng serve
lubng build --watch
nie działa, jeśli katalog nie ma wystarczających uprawnień.Rozwiązaniem jest zapewnienie niezbędnych uprawnień lub ich użycie
sudo
.AKTUALIZACJA
Watch flag in
ng serve
jest w rzeczywistości zbędna, ponieważ jest opcją domyślną. Podziękowania dla @Zaphoid za wskazanie błędu.źródło
ng serve
zsudo
uprawnieniami. Udało się.a+x
, ale ostrzegam przed używaniem uprawnień, a niesudo
.sudo
dotyczy jednego polecenia, podczas gdy zmiana uprawnień zmienia je na zawsze, co wydaje się większym wyciekiem bezpieczeństwa.--watch
nie powinno być konieczne, ponieważ jest to ustawienie domyślne, zobacz angular.io/cli/serve . Więc @T. Odpowiedź van den Berga była właściwie bardziej precyzyjna!Działa dobrze w Linuksie i Windowsie
źródło
Weź pod uwagę, że w przypadku dużej liczby plików istnieje limit w INotify Watches w systemie Linux. Na przykład zwiększenie limitu zegarków do 512K może rozwiązać ten problem.
Zwróć uwagę, że poprzednia powoduje zmianę w pamięci, którą utracisz po ponownym uruchomieniu.
Możesz jednak uczynić go trwałym , wykonując:
Jako punkt odniesienia możesz sprawdzić: https://github.com/angular/angular-cli/issues/8313#issuecomment-362728855 i https://github.com/guard/listen/wiki/Increasing-the-amount- of-inotify-watchers
źródło
cat /proc/sys/fs/inotify/max_user_watches
Powyższa odpowiedź jest kompletną odpowiedzią, ale tutaj jest link z nieco większym opisem confluence.jetbrains.com/display/IDEADEV/Inotify+Watches+LimitZ tego powodu system wykrywający zmiany domyślnie nie obsługuje tylu zegarków.
A rozwiązaniem jest to,
change the amount of watches
że poradzi sobie (maksymalna ilość plików, które znajdą się w projekcie) musiszrun this command
:Problem z inotify polega na resetowaniu tego licznika po każdym ponownym uruchomieniu komputera.
źródło
W Twoim projekcie folder dist należy do katalogu głównego
Spróbuj użyć
sudo ng serve
zamiastng serve
.Inne rozwiązanie
Gdy jest duża liczba plików, funkcja Watch nie działa w systemie Linux.Istnieje limit w INotify Watches w systemie Linux. Zwiększenie limitu zegarków
źródło
Wystarczy uruchomić sudo ng, aby rozwiązać problem.
źródło
Może to pomóc, jeśli jest to ten sam problem, który miałem. Próbowałem użyć
ng serve
ing build --watch
czasami działało, ale przeważnie nie obserwowali zmian w kodzie i pomyślałem, że to ma coś wspólnego zng
.Wtedy przypomniałem sobie problem, który miałem jakiś czas temu z zegarkami inotify
Uruchomiłem to na moim komputerze z Ubuntu i wydaje się, że włączyłem się i obserwowałem zmiany kodu:
echo fs.inotify.max_user_watches = 524288 | sudo tee /etc/sysctl.d/40-max-user-watches.conf && sudo sysctl --system
zasługa Scotta Smitha
źródło
Spróbuj tego. Jeśli to zrobisz, nie musisz zawsze odpalać żadnej komendy. Wystrzelisz tylko raz
źródło
Nie działa dla mnie:
Próbować :
to działało dla mnie!
źródło
Jeśli wszystko inne zawiedzie, sprawdź kod pod kątem błędów składniowych - szczególnie w
index.html
kodzie lub jego części, które niedawno edytowałeś tuż przed zepsuciem automatycznej aktualizacji. Błędy składniowe zakłócą funkcję automatycznej aktualizacji w Angular.W moim przypadku miałem wiele projektów otwartych w oddzielnych oknach VS Code. We wszystkich innych moich projektach
ng serve
działało zgodnie z oczekiwaniami: automatycznie aktualizowało się przy zapisywaniu. Jednak w przypadku jednego projektu aktualizacja wymagałaby ręcznego odświeżenia. Skończyło się tak, ponieważ miałem komentarze html poza zdefiniowanym obszarem HTML szablonu (więc komentarze HTML pojawiły się wcześniej<!doctype html>
. Więc było to nieprawidłowe, ponieważ składnia HTML znajduje się poza obszarem HTML.Usunąłem komentarze i bam, automatyczna aktualizacja znów zaczęła działać (po jeszcze jednym ręcznym odświeżeniu).
Więc przejrzyj
index.html
lub inne części kodu, które niedawno edytowałeś, zanim to się zepsuło, i jeden po drugim, wytnij szkicowe części, odśwież w przeglądarce, a następnie wróć do VS Code i wprowadź zmianę, zapisz i sprawdź, czy automatycznie się aktualizuje .źródło
@Input()
, ale atrybut był pusty, tak:[myInput]=""
. Wypełnianie go przywróconą wartościąng serve
, nie jest wymagane ręczne odświeżanie.Odkryłem, że katalog dist / w projekcie był własnością roota. Dlatego
sudo ng serve
widzi zmiany, kiedyng serve
nie.Usunąłem folder dist /
sudo rm -R dist/
i odbudowałem go jako bieżący użytkownik, uruchamiając serwer dewelopersking serve
i wszystko działało ponownie.źródło
Miałem ten problem na nowej instalacji Linuksa Ubuntu i zauważyłem, że w tym samym czasie w VSCode pojawia się błąd dotyczący „zbyt wielu obserwatorów dla limitu”. Postępowałem zgodnie z instrukcjami, aby naprawić to w VSCode, a także naprawiłem problem z zegarkiem ng. Więcej informacji tutaj https://code.visualstudio.com/docs/setup/linux#_visual-studio-code-is-unable-to-watch-for-file-changes-in-this-large-workspace-error-enospc
Zauważyłem ludzi sugerujących
sudo
bieganie na warcie. To niebezpieczna gra, dajesz pakietom npm uprawnienia roota do swojego systemu. Jeśli twoje uprawnienia są poprawne, moim problemem może być twoja poprawka, ponieważ limit dotyczy użytkownika, a uruchamiając jako sudo, korzystasz z konta root zamiast bieżącego użytkownika, który przekroczył limit (uruchamiając ciężki identyfikator, taki jak vscode lub atom włączony). Jeśli z jakiegoś powodu masz złe uprawnienia, ustaw je poprawnie dla swojego użytkownika / grupy za pomocąchown
.źródło
chown
zamiast biegaćng serve
zsudo
, których należy unikać za wszelką cenę!Miałem ten sam problem, używanie
sudo ng serve
wydawało się „rozwiązać” problem niezadowalająco. Używaniesudo
IMO nie jest zadowalające.Sprawdziłem liczbę INotify w porównaniu z moim domyślnym limitem (8192), używając:
lsof | grep inotify | wc -l
Wartość zwrócona przez powyższe polecenie była znacznie mniejsza niż limit. Więc rozwiązanie INotify wydaje się nie mieć zastosowania do mojego problemu.Sprawdziłem również uprawnienia i własność, oba wydawały się w porządku, porównywalne z innym projektem, który działał.
Z frustracji ponownie uruchomiłem VS Code. Zasadniczo zamknąłem wszystkie wystąpienia, miałem dwie uruchomione i ponownie otworzyłem obie, po czym problem zniknął.
Skłaniam się gdzieś w kierunku możliwego błędu. Należy to rozważyć przed wywróceniem systemu na lewą stronę. Na szczęście / Niestety ten problem nie wystąpił ponownie, poszukam głębiej, jeśli tak się stanie.
źródło
Ty też możesz spróbować.
źródło
Nie polecam zmieniać parametrów SO. Po zmianie parametru fs.inotify.max_user_watches wystąpiły pewne problemy (z opóźnieniem), ponieważ będą działały inne usługi ...
Dobrym rozwiązaniem jest „ng serv --poll = 2000”, ale prawdopodobnie zapomnisz o tym parametrze ...
Badanie: https://github.com/angular/angular-cli/wiki/angular-cli Zrobiłem następujące rozwiązanie.
Zmieniono de angular.json z parametrem ankiety
Działa na mojej maszynie: D
źródło
npm run ng serve -- --poll=2000
. Nie jest to tak przyjemne, jak wykrywanie zmian plików, ale działa po prostu na moim komputerze (korporacyjna wersja Ubuntu 18.04). Mam wartość max_user_watches ustawioną na 524288, aleng serve
po pewnym czasie nadal nie udaje mi się wykryć zmian. Mam lepsze rzeczy do zrobienia niż zbadanie tego, więc to rozwiązanie jest właśnie tym, czego potrzebuję.Wykonywanie
sudo ng serve
poleceń to zła praktyka. Musisz zmienićnpm
uprawnienia, aby za każdym razem, gdy musisz coś zainstalowaćnpm packages
, nie musisz używaćsudo
.To łącze może rozwiązać sposób zmiany uprawnienia npm na bieżącego użytkownika, a po wykonaniu tych kroków po ustawieniu uprawnienia npm można usunąć
node_modules
folder z katalogu projektu i użyćnpm install
. Po zakończeniu instalacji pakietów możesz uruchomićng serve
i nie musisz tego robić zasudo ng serve
każdym razem, gdy chcesz uruchomić swój projekt angular.źródło
do okna -
W systemie Linux -
źródło
Moja odpowiedź może się nie przydać. ale szukam tego pytania z tego powodu.
Po zakupie nowego komputera zapomniałem ustawić automatyczne zapisywanie w edytorze. Dlatego kod faktycznie pozostaje niezmieniony.
źródło
Chciałbym zostawić tutaj moją sprawę, tylko w celach informacyjnych. W moim przypadku problem dotyczył uprawnień systemu. Użyłem folderu współdzielonego wewnątrz maszyny wirtualnej jako repozytorium. Nie otrzymałem żadnej innej wiadomości, takiej jak odmowa pozwolenia czy coś takiego. Wypróbowałem wszystko, a potem właśnie zdałem sobie sprawę, że używam dysku sieciowego.
źródło
Ponowne uruchomienie serwera zadziałało.
źródło
Udzielenie pełnych uprawnień do folderu projektu zadziałało dla mnie
źródło
W moim przypadku na Macu zostało to naprawione poprzez przyznanie zalogowanemu użytkownikowi uprawnień do odczytu / zapisu do / usr / local / lib
źródło