ng melayani tidak mendeteksi perubahan file secara otomatis


110

Saya perlu menjalankan ng servesetiap kali ada perubahan yang dilakukan pada file sumber. Saya tidak memiliki kesalahan di konsol.

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
Apakah Anda mencoba melakukan serve --watch?
planet_hunter

2
Iya. Tapi itu tidak menyelesaikan masalah saya
Bhaskararao Gummidi

Silakan periksa jawaban saya yang diperbarui dan beri tahu saya jika itu menyelesaikan masalah.
planet_hunter

Jawaban:


151

Sering kali di Linux, ng serveatau ng build --watchtidak berfungsi jika direktori tidak memiliki izin yang memadai.

Solusinya adalah memberikan izin yang diperlukan atau menggunakan sudosebagai gantinya.

MEMPERBARUI

flag watch in ng servesebenarnya berlebihan karena ini adalah opsi default. Penghargaan untuk @Zaphoid karena menunjukkan kesalahannya.


29
Terima kasih. Saya menjalankan ng servedengan sudoizin. Berhasil.
Bhaskararao Gummidi

1
Maka, terimalah ini sebagai jawabannya, yang akan membantu orang lain yang membaca pertanyaan ini di masa mendatang
Mawg berkata, kembalikan Monica

3
@Mawg Daripada menggunakan sudo. Set izin mana yang harus dimiliki file?
oracleruiz

2
Tergantung pada pengguna yang sedang berjalan, mungkin sebanyak itu a+x, tapi saya memperingatkan agar tidak menggunakan izin, daripada sudo. sudoadalah untuk satu perintah, sedangkan mengubah izin mengubahnya selamanya, yang tampaknya merupakan kebocoran keamanan yang lebih besar.
Mawg mengatakan memulihkan Monica

5
--watchseharusnya tidak diperlukan, karena ini adalah default, lihat angular.io/cli/serve . Jadi @T. Jawaban van den Berg sebenarnya lebih tepat!
Zaphoid

126
ng serve --poll=2000

Bekerja dengan baik di linux dan windows


19
apa artinya (--poll)
HD ..

1
Dapat mengonfirmasi bahwa ini berfungsi. Menjalankan subsistem linux pada Windows 10 (Ubuntu) dengan VS Code yang berjalan pada Windows.
Ales Potocnik Hahonina

Bekerja pada ubuntu 18.0.4
Nishān Wickramarathna

2
Itu berfungsi di ubuntu 18.04. dapatkah anda menjelaskan alasannya?
Vijender Kumar

2
Bagi saya bekerja dengan baik! Tapi, saya tidak mengerti penyebab "ng serve" tidak memuat ulang proyek.
José Luiz Gonzaga Neto

81

Pertimbangkan bahwa, ketika memiliki banyak file, ada Batasan di Jam Tangan INotify di Linux. Jadi, meningkatkan batas jam tangan menjadi 512K, misalnya, dapat mengatasi masalah ini.

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

Perhatikan bahwa sebelumnya menyebabkan perubahan dalam memori yang akan hilang setelah restart.

Namun, Anda bisa membuatnya persisten , dengan menjalankan:

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

Sebagai referensi, Anda dapat memeriksa: https://github.com/angular/angular-cli/issues/8313#issuecomment-362728855 dan https://github.com/guard/listen/wiki/Increasing-the-amount- pengamat inotify


5
Ini berhasil bagi saya di 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
Anda dapat menggunakan perintah ini untuk memeriksa / menguji batas tontonan saat ini. cat /proc/sys/fs/inotify/max_user_watches Jawaban di atas adalah jawaban yang benar-benar lengkap, tetapi berikut ini adalah tautan dengan lebih banyak deskripsi confluence.jetbrains.com/display/IDEADEV/Inotify+Watches+Limit
Junaid

bekerja dengan baik. perlu dicatat bahwa beberapa IDE (seperti JetBrains Webstorm) menggunakan inotify untuk melacak perubahan file juga. jadi, perlu diingat jika Anda membuka 5 proyek dan kemudian menjalankan servis.
Multis

25

Karena itu, Sistem yang mendeteksi perubahan tidak dapat menangani begitu banyak jam tangan secara default.

Dan solusinya adalah untuk change the amount of watchesdapat menangani (jumlah maksimum file yang akan ada dalam proyek) Anda harus run this command:

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

Masalah dengan inotify adalah mengatur ulang penghitung ini setiap kali Anda me-restart komputer Anda.


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

18

Di folder project dist Anda dimiliki oleh root

Coba gunakan, sudo ng servebukan ng serve.

Solusi lain

Jika ada banyak file, jam tangan tidak berfungsi di linux. Ada Batasan di INotify Watches di Linux. Jadi meningkatkan batas jam tangan

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

Hanya perlu menjalankan sudo ng serve untuk menyelesaikan masalah.


5
Solusi yang bagus tetapi mengapa harus melakukannya adalah pertanyaan sebenarnya .... menjalankan sebagai root bukanlah praktik terbaik ...
Pipo

5

Ini dapat membantu jika itu adalah masalah yang sama dengan yang saya alami. Mencoba menggunakan ng servedan ng build --watchterkadang berhasil tetapi kebanyakan mereka tidak memperhatikan perubahan kode dan saya pikir itu ada hubungannya dengan ng.

Kemudian saya teringat masalah yang saya alami beberapa waktu lalu dengan jam tangan inotify

Saya menjalankan ini di mesin Ubuntu saya dan tampaknya telah memulai dan melihat perubahan kode:

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

kredit diberikan kepada Scott Smith


3

coba ini. Jika Anda melakukan seperti ini, Anda tidak perlu selalu mengaktifkan perintah apa pun. Anda hanya perlu mengaktifkan satu kali

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

Tidak berhasil untuk saya:

ng serve --watch

Coba:

sudo ng serve

ini berhasil untuk saya!


2

Jika semuanya gagal, periksa kode Anda untuk kesalahan sintaks - terutama pada index.html, atau bagian dari kode Anda yang baru saja Anda edit sebelum pembaruan otomatis ini rusak. Kesalahan sintaksis akan merusak fungsionalitas pembaruan otomatis ini di Angular.

Dalam kasus saya, saya memiliki beberapa proyek yang terbuka di jendela VS Code terpisah. Di semua proyek saya yang lain, ng servebekerja seperti yang diharapkan: diperbarui secara otomatis saat disimpan. Tetapi pada satu proyek, pembaruan manual memerlukan pembaruan. Itu berakhir karena saya memiliki komentar html di luar area HTML yang ditentukan dari template (jadi, komentar HTML datang sebelumnya <!doctype html>. Jadi tidak valid karena sintaks HTML di luar area HTML.

Saya menghapus komentar dan bam, pembaruan otomatis mulai berfungsi lagi (setelah satu penyegaran manual lagi).

Jadi buka index.htmlatau bagian lain dari kode Anda yang baru saja Anda edit sebelum rusak dan satu per satu, potong bagian yang tidak jelas, lakukan penyegaran di browser, lalu kembali ke VS Code dan buat perubahan, simpan dan lihat apakah itu pembaruan otomatis .


1
Kesalahan lain dengan Template juga dapat mencegahnya bekerja dengan benar. Dalam kasus saya, saya memiliki kebiasaan komponen mengharapkan @Input(), tapi atribut itu kosong, seperti ini: [myInput]="". Mengisinya dengan nilai yang dipulihkan ng serve, tidak diperlukan penyegaran manual.
Zarepheth

2

Saya menemukan bahwa folder dist / dalam proyek ini dimiliki oleh root. Itulah mengapa sudo ng servemelihat perubahan saat ng servetidak.

Saya menghapus folder dist / sudo rm -R dist/dan membangunnya kembali sebagai pengguna saat ini dengan memulai server dev ng servedan semuanya bekerja kembali.


2

Saya mengalami masalah ini pada instalasi baru Linux Ubuntu dan memperhatikan bahwa saya mendapatkan kesalahan tentang 'terlalu banyak pengamat untuk batas' di VSCode pada saat yang bersamaan. Saya mengikuti instruksi untuk memperbaikinya di VSCode dan itu juga memperbaiki masalah dengan arloji ng. Info lebih lanjut di sini https://code.visualstudio.com/docs/setup/linux#_visual-studio-code-is-unable-to-watch-for-file-changes-in-this-large-workspace-error-enospc

Saya melihat orang-orang menyarankan sudountuk menjalankan jam tangan. Ini adalah permainan yang berbahaya, Anda memberikan akses root paket npm ke sistem Anda. Jika izin Anda benar, masalah saya bisa menjadi perbaikan Anda karena batasnya adalah per pengguna, dan dengan menjalankan sebagai sudo, Anda menjalankan sebagai root alih-alih pengguna Anda saat ini yang melewati batas (menjalankan arloji ide berat seperti vscode atau atom di ). Jika karena alasan tertentu Anda memiliki izin yang salah, setel dengan benar ke pengguna / grup Anda chown.


1 untuk menyarankan untuk menggunakan chownalih-alih menjalankan ng servedengan sudo, yang harus dihindari dengan segala cara!
Tobi

1

Saya memiliki masalah yang sama, menggunakan sudo ng servesepertinya "memecahkan" masalah dengan tidak memuaskan. Menggunakan sudoIMO tidak memuaskan.

Saya memeriksa jumlah INotify saya versus batas default saya (8192) menggunakan: lsof | grep inotify | wc -l Nilai yang dikembalikan oleh perintah di atas jauh lebih kecil dari batas. Jadi solusi INotify sepertinya tidak berlaku untuk masalah saya.

Saya juga memeriksa izin dan kepemilikan, keduanya tampak baik-baik saja, sebanding dengan proyek lain yang berhasil.

Karena frustrasi saya memulai kembali VS Code. Pada dasarnya saya menutup semua contoh, saya menjalankan dua dan membuka kembali keduanya setelah masalah hilang.

Saya condong ke kemungkinan bug di suatu tempat. Ini adalah sesuatu yang perlu dipertimbangkan sebelum membalik sistem Anda. Untungnya / Sayangnya masalah ini tidak terjadi lagi, saya akan menggali lebih dalam jika terjadi.



1

Saya tidak merekomendasikan mengubah parameter SO. Saya mengalami beberapa masalah (kelambatan) setelah mengubah parameter fs.inotify.max_user_watches karena Anda akan menjalankan layanan lain ...

"Ng serve --poll = 2000" adalah solusi yang bagus tetapi Anda mungkin akan melupakan parameter ini ...

Investigasi: https://github.com/angular/angular-cli/wiki/angular-cli Saya telah melakukan solusi berikut.

Mengubah de angular.json dengan parameter polling

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

Bekerja di Mesin Saya: D


Terima kasih! Ini adalah cara ad hoc untuk menjalankannya tanpa memodifikasi file konfigurasi: npm run ng serve -- --poll=2000. Ini tidak sebaik deteksi perubahan file, tetapi hanya berfungsi pada mesin saya (rasa korporat Ubuntu 18.04). Saya telah menyetel max_user_watches ke 524288, tetapi ng servemasih gagal mendeteksi perubahan setelah beberapa waktu. Saya memiliki hal-hal yang lebih baik untuk dilakukan daripada menyelidiki ini, jadi solusi ini yang saya butuhkan.
Andrei Sinits

1

Melakukan sudo ng serveperintah adalah praktik yang buruk. Anda harus mengubah npmizin sehingga setiap kali Anda harus menginstal beberapa npm packagesAnda tidak perlu menggunakan sudo.

Tautan ini dapat menyelesaikan cara mengubah izin npm ke pengguna saat ini dan setelah mengikuti langkah-langkah ini setelah Anda menyetel izin npm, Anda dapat menghapus node_modulesfolder dari direktori proyek Anda dan menggunakannya npm install. Setelah menyelesaikan instalasi paket, Anda dapat menjalankan ng servedan Anda tidak perlu melakukannya sudo ng servesetiap kali Anda ingin menjalankan proyek sudut Anda.



0

Jawaban saya mungkin tidak berguna. tapi saya mencari pertanyaan ini karena ini.

Setelah saya membeli komputer baru, saya lupa menyetel simpan otomatis di editor. Oleh karena itu, kode tersebut sebenarnya tidak berubah.


0

Saya ingin meninggalkan kasus saya di sini, hanya untuk referensi. Dalam kasus saya, masalahnya ada pada izin sistem. Saya menggunakan folder bersama di dalam VM sebagai repo. Saya tidak memiliki pesan lain seperti izin ditolak atau sesuatu. Mencoba semuanya dan kemudian saya baru menyadari bahwa saya menggunakan drive jaringan.




0

Dalam kasus saya di Mac, itu diperbaiki dengan memberikan izin Baca / Tulis untuk masuk pengguna ke / usr / local / lib

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.