ng hizmeti, dosya değişikliklerini otomatik olarak algılamıyor


110

ng serveKaynak dosyalarda herhangi bir değişiklik yapıldığında her seferinde çalıştırmam gerekiyor.Konsolda herhangi bir hata yok.

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
Servis yapmayı denedin mi - izle?
planet_hunter

2
Evet. Ama sorunumu
çözmedi

Lütfen güncellenmiş cevabımı kontrol edin ve sorunu çözüp çözmediğini bana bildirin.
planet_hunter

Yanıtlar:


151

Çoğu zaman Linux'ta ng serveveya ng build --watchdizinin yeterli izinleri yoksa çalışmıyor.

Çözüm, gerekli izinleri sağlamak veya sudobunun yerine kullanmaktır .

GÜNCELLEME

Watch flag in ng serve, varsayılan seçenek olduğundan aslında gereksizdir. Hatayı işaret ettiği için @ Zaphoid'e kredi verin.


29
Teşekkür ederim. Ben koşmak ng serveile sudoizinleri. Çalıştı.
Bhaskararao Gummidi

1
Öyleyse, lütfen bunu yanıt olarak kabul edin; bu, gelecekte bu soruyu okuyanlara yardımcı olacaktır
Mawg, Monica'nın

3
@Mawg sudo kullanmak yerine. Dosyaların sahip olması gereken izinler nelerdir?
oracleruiz

2
Çalışmakta olan kullanıcıya bağlı olabilir, belki de kadar a+x, ancak izinleri kullanmak yerine izinlerin kullanılmaması konusunda uyarıyorum sudo. sudotek bir komut içindir, oysa izinleri değiştirmek onları sonsuza kadar değiştirir, bu da daha büyük bir güvenlik sızıntısı gibi görünür.
Mawg, Monica'nın

5
--watchvarsayılan olduğundan gerekli olmamalıdır, bkz. angular.io/cli/serve . Yani @T. van den Berg'in cevabı aslında daha kesindi!
Zaphoid

126
ng serve --poll=2000

Linux ve pencerelerde sorunsuz çalışıyor


19
ne anlama geliyor (--poll)
HD ..

1
Bunun işe yaradığını teyit edebilir. Linux alt sistemini Windows'ta çalışan VS Code ile WIndows 10 (Ubuntu) üzerinde çalıştırma.
Ales Potocnik Hahonina

Ubuntu 18.0.4 üzerinde çalışıyor
Nishān Wickramarathna

2
Bu, ubuntu 18.04'te çalıştı. lütfen nedenini açıklar mısınız?
Vijender Kumar

2
Benim için iyi çalışıyor! Ancak, "ng hizmetinin" nedenini anlamıyorum, projeyi yeniden yüklemeyin.
José Luiz Gonzaga Neto

81

Çok sayıda dosyaya sahip olduğunuzda, Linux'ta INotify Watches'da bir Limit olduğunu düşünün . Dolayısıyla, örneğin saat sınırını 512K'ya çıkarmak bu sorunu çözebilir.

sudo sysctl fs.inotify.max_user_watches=524288
sudo sysctl -p --system

Önceki durumun, yeniden başlattıktan sonra kaybedeceğiniz bir bellek içi değişikliğe neden olduğunu unutmayın.

Ancak, aşağıdakileri yürüterek bunu kalıcı hale getirebilirsiniz :

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

Referans olarak şunları kontrol edebilirsiniz: https://github.com/angular/angular-cli/issues/8313#issuecomment-362728855 ve https://github.com/guard/listen/wiki/Increasing-the-amount- of-inotify-watchers


5
Bu benim için 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
mevcut saat limitini kontrol etmek / test etmek için bu komutu kullanabilirsiniz cat /proc/sys/fs/inotify/max_user_watches Yukarıdaki cevap tamamen eksiksiz bir cevaptır, ancak burada biraz daha fazla açıklama içeren bir bağlantı var confluence.jetbrains.com/display/IDEADEV/Inotify+Watches+Limit
Junaid

iyi çalıştı. bazı IDE'lerin (JetBrains Webstorm gibi) dosya değişikliklerini izlemek için de inotify kullandığını belirtmek gerekir. Bu nedenle, 5 proje açıp hizmet veriyorsanız aklınızda bulundurun.
Multis

25

Çünkü, değişiklikleri algılayan sistem varsayılan olarak çok fazla saati işleyemez.

Çözüm, change the amount of watchesişleyebilmesi için (projede yer alacak maksimum dosya miktarı) şunları yapmanız gerekir run this command:

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

İnotify ile ilgili sorun, bilgisayarınızı her yeniden başlattığınızda bu sayacı sıfırlamaktır.


5
echo fs.inotify.max_user_watches = 524288 | sudo tee -a /etc/sysctl.conf && sudo sysctl -p
Wagner da Silva

18

Projenizde dist klasörünün sahibi kök

sudo ng serveBunun yerine kullanmayı deneyin ng serve.

Başka bir çözüm

Çok sayıda dosya olduğunda, izleme Linux'ta çalışmaz. Linux'ta INotify Watches'da bir Limit vardır. Yani saat limitini arttırmak

//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

Sorunu çözmek için sadece sudo ng hizmetini çalıştırmanız gerekir .


5
Güzel bir çözüm ama neden bunu yapmak zorunda kalmak asıl soru .... kök olarak koşmak en iyi uygulama değil ...
Pipo

5

Bu, sahip olduğum sorunla aynıysa yardımcı olabilir. Kullanmaya çalışıyorum ng serveve ng build --watchbazen işe yaradı ama çoğunlukla kod değişikliklerini izlemiyorlardı ve bununla ilgili bir şey olduğunu düşündüm ng.

Sonra bir süre önce inotify saatlerinde yaşadığım bir sorunu hatırladım

Bunu Ubuntu makinemde çalıştırdım ve devreye girmiş ve kod değişikliklerini izliyor gibi görünüyor:

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

kredi Scott Smith'e gidiyor


3

bunu dene. Eğer böyle yaparsan her zaman herhangi bir komutu ateşlemene gerek yok Sadece bir defa ateş etmen gerekir

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

Benim için çalışmadı:

ng serve --watch

Deneyin :

sudo ng serve

bu benim için çalıştı!


2

Her şey başarısız olursa, kodunuzda sözdizimi hataları olup olmadığını kontrol edin - özellikle de index.htmlbu otomatik güncelleme bozulmadan hemen önce kodunuzun yakın zamanda düzenlediğiniz kısımları. Sözdizimi hataları, Angular'daki bu otomatik güncelleme işlevini bozacaktır.

Benim durumumda, ayrı VS Code pencerelerinde açık birden fazla projem vardı. Diğer tüm projelerimde ng servebeklendiği gibi çalıştı: kaydedildiğinde otomatik olarak güncellenir. Ancak bir projede güncelleme için manuel yenileme gerektirir. Sonuçta, şablonun tanımlı HTML alanının dışında html yorumlarım olduğu için ortaya çıktı (bu nedenle, HTML yorumları daha önce geldi <!doctype html>. Bu nedenle, bir HTML alanının dışında HTML sözdizimi olduğu için geçersizdi.

Yorumları ve bam'ı sildim, otomatik güncelleme tekrar çalışmaya başladı (bir manuel yenilemeden sonra).

Bu nedenle index.html, kodunuzun kırılmadan önce son düzenlediğiniz bölümlerini veya diğer bölümlerini teker teker gözden geçirin, kabataslak parçaları kesin, tarayıcıda bir yenileme yapın, ardından VS Code'a geri dönün ve bir değişiklik yapın, kaydedin ve otomatik olarak güncellenip güncellenmediğini görün .


1
Şablondaki diğer hatalar da şablonun düzgün çalışmasını engelleyebilir. Benim durumumda, ben bir bekliyor özel bileşen vardı @Input(), ama nitelik böyle boş oldu: [myInput]="". Geri yüklenen bir değerle doldurmak ng serve, manuel yenileme gerekmez.
Zarepheth

2

Projedeki dist / klasörün köke ait olduğunu keşfettim. Bu yüzden sudo ng servedeğişmediği zaman değişiklikleri görüyor ng serve.

Dist / klasörünü kaldırdım ve sudo rm -R dist/dev sunucusunu başlatarak mevcut kullanıcı olarak yeniden oluşturdum ng serveve hepsi tekrar çalıştı.


2

Bu sorunu yeni bir Linux Ubuntu kurulumunda yaşıyordum ve aynı anda VSCode'da 'limit için çok fazla izleyici' hatası aldığımı fark ettim. VSCode'da düzeltmek için talimatları izledim ve ayrıca ng saatiyle ilgili sorunu düzelttim. Daha fazla bilgi burada https://code.visualstudio.com/docs/setup/linux#_visual-studio-code-is-unable-to-watch-for-file-changes-in-this-large-workspace-error-enospc

İnsanların sudonöbet tutmayı önerdiğini fark ettim . Bu tehlikeli bir oyun, npm paketlerine sisteminize kök erişimi veriyorsunuz. İzinleriniz doğruysa, sorunum, sınır kullanıcı başına olduğundan düzeltmeniz olabilir ve sudo olarak çalıştırarak, sınırı aşan mevcut kullanıcınız yerine root olarak çalıştırıyorsunuz (vscode veya atom gibi bir saat ağır ide çalıştırma üzerinde). Herhangi bir nedenle yanlış izinlere sahipseniz, bunları kullanıcı / grubunuz için doğru şekilde ayarlayın chown.


Kullanmak öneren 1 chownyerine çalışan ng serveile sudoelbette kaçınılmalıdır hangi!
Tobi

1

Ben de aynı sorunu yaşadım, kullanmak sudo ng servesorunu tatmin edici olmayan bir şekilde "çözüyordu". Kullanılması sudoIMO tatmin edici değil.

INotify sayımı varsayılan limitime (8192) karşı kontrol ettim: lsof | grep inotify | wc -l Yukarıdaki komut tarafından döndürülen değer limitin çok altındaydı. Bu nedenle, INotify çözümü sorunuma uygulanmıyor gibi görünüyor.

Ayrıca izinleri ve sahipliği de kontrol ettim, her ikisi de işe yarayan başka bir projeye kıyasla iyi görünüyordu.

Hayal kırıklığı yüzünden VS Code'u yeniden başlattım. Temel olarak tüm örnekleri kapattım, iki tane çalıştırdım ve her ikisini de yeniden açtım ve ardından sorun ortadan kalktı.

Bir yerlerde olası bir böceğe doğru eğiliyorum. Bu, sisteminizi tersyüz etmeden önce dikkate almanız gereken bir şeydir. Neyse ki / Maalesef bu sorun bir daha ortaya çıkmadı, olursa daha derine ineceğim.



1

SO parametrelerinin değiştirilmesini önermiyorum. Fs.inotify.max_user_watches parametresini değiştirdikten sonra başka hizmetlerin çalışacağı için bazı (gecikme) sorunları yaşadım ...

"Ng service --poll = 2000" iyi bir çözümdür, ancak muhtemelen bu parametreyi unutacaksınız ...

Araştırma: https://github.com/angular/angular-cli/wiki/angular-cli Aşağıdaki çözümü yaptım.

Anket parametresiyle de angular.json değiştirildi

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

Makinemde Çalışır: D


Teşekkür ederim! Bu yapılandırma dosyaları değiştirmeden çalıştırmak için ad hoc yoludur: npm run ng serve -- --poll=2000. Bu, dosya değişikliği tespiti kadar güzel değil, sadece makinemde çalışıyor (Ubuntu 18.04'ün kurumsal özelliği). 524288'e ayarlanmış max_user_watches'ım var, ancak bir ng servesüre sonra hala değişiklikleri tespit edemiyor. Bunu araştırmaktan daha iyi işlerim var, bu yüzden bu çözüm tam da ihtiyacım olan şey.
Andrei Sinitson

1

sudo ng serveKomutu yapmak kötü bir uygulamadır. npmİzinleri değiştirmeniz gerekir, böylece her seferinde bazılarını yüklemeniz npm packagesgerekiyorsa kullanmak zorunda kalmazsınız sudo.

Bu bağlantı , mevcut kullanıcı için npm izninin nasıl değiştirileceğini çözebilir ve bu adımları izledikten sonra npm iznini ayarladıktan sonra node_modulesklasörü proje dizininizden kaldırıp kullanabilirsiniz npm install. Paketlerin kurulumunu tamamladıktan sonra çalıştırabilirsiniz ng serveve sudo ng serveaçısal projenizi her çalıştırmak istediğinizde yapmanız gerekmez .



0

Cevabım faydalı olmayabilir. ama bu soruyu bu yüzden araştırıyorum.

Yeni bir bilgisayar satın aldıktan sonra, düzenleyicide otomatik kaydetmeyi ayarlamayı unuttum. Bu nedenle, kod aslında değişmeden kalır.


0

Sadece referans olması için davamı burada bırakmak istiyorum. Benim durumumda, sorun sistem izinlerindeydi. Depo olarak bir VM içinde paylaşılan bir klasör kullandım. İzin verilmedi diye başka bir mesajım yoktu. Her şeyi denedim ve sonra bir ağ sürücüsü kullandığımı fark ettim.




0

Mac'teki durumumda, kullanıcıya / usr / local / lib'de oturum açması için Okuma / Yazma izni verilerek düzeltildi

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.