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
คุณลอง ng serve --watch ไหม?
planet_hunter

2
ใช่. แต่มันไม่สามารถแก้ปัญหาของฉันได้
Bhaskararao Gummidi

โปรดตรวจสอบคำตอบที่อัปเดตของฉันและแจ้งให้เราทราบหากสามารถแก้ปัญหาได้
planet_hunter

ลองทางนี้ - stackoverflow.com/a/42534127/1191125
zeleniy

คำตอบ:


151

เวลาส่วนใหญ่ใน Linux ng serveหรือng build --watchไม่ทำงานหากไดเร็กทอรีไม่มีสิทธิ์เพียงพอ

วิธีแก้ปัญหาคือให้สิทธิ์ที่จำเป็นหรือใช้ sudoแทน

อัปเดต

การตั้งค่าสถานะนาฬิกาเข้าng serveซ้ำซ้อนจริง ๆ เนื่องจากเป็นตัวเลือกเริ่มต้น เครดิต @Zaphoid สำหรับการชี้ให้เห็นความผิดพลาด


29
ขอบคุณ. ฉันทำงานng serveด้วยsudoสิทธิ์ มันใช้งานได้
Bhaskararao Gummidi

1
จากนั้นโปรดยอมรับสิ่งนี้เป็นคำตอบซึ่งจะช่วยให้ผู้อื่นที่อ่านคำถามนี้ในอนาคต
Mawg กล่าวคืนสถานะ Monica

3
@Mawg แทนที่จะใช้ sudo ไฟล์ควรมีสิทธิ์ชุดใด
oracleruiz

2
ขึ้นอยู่กับผู้ใช้ที่ทำงานอาจจะมากที่สุดเท่าที่แต่ผมเตือนกับการใช้สิทธิ์มากกว่าa+x มีไว้สำหรับคำสั่งเดียวในขณะที่การเปลี่ยนสิทธิ์จะเปลี่ยนตลอดไปซึ่งดูเหมือนจะเป็นการรั่วไหลของความปลอดภัยมากขึ้น sudosudo
Mawg กล่าวว่าคืนสถานะ Monica

5
--watchไม่ควรจะเป็นความจำเป็นในขณะที่มันเป็นค่าเริ่มต้นดูangular.io/cli/serve ดังนั้น @T. คำตอบของ van den Berg แม่นยำกว่าจริงๆ!
Zaphoid

126
ng serve --poll=2000

ทำงานได้ดีใน linux และ windows


19
หมายความว่าอย่างไร (--poll)
HD ..

1
สามารถยืนยันการทำงานนี้ ใช้งานระบบย่อย linux บน WIndows 10 (Ubuntu) ด้วย VS Code ที่ทำงานบน Windows
Ales Potocnik Hahonina

ใช้งานได้กับ Ubuntu 18.0.4
Nishān Wickramarathna

2
ที่ทำงานบน ubuntu 18.04 คุณช่วยอธิบายเหตุผลได้ไหม
Vijender Kumar

2
สำหรับฉันทำงานได้ดี! แต่ฉันไม่เข้าใจสาเหตุ "ng ให้บริการ" ไม่โหลดโครงการซ้ำ
José Luiz Gonzaga Neto

81

พิจารณาว่าเมื่อมีไฟล์จำนวนมากมีข้อ จำกัด ที่INotify Watches บน Linux ตัวอย่างเช่นการเพิ่มขีด จำกัด ของนาฬิกาเป็น 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-362728855และ https://github.com/guard/listen/wiki/Increasing-the-amount- ของ inotify-watchers


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 โปรเจ็กต์และรัน ng ให้บริการมากกว่า
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 tee -a /etc/sysctl.conf && sudo sysctl -p
Wagner da Silva

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 ng serve เพื่อแก้ไขปัญหาเท่านั้น


5
วิธีแก้ปัญหาที่ดี แต่ทำไมต้องทำเช่นนั้นเป็นคำถามจริง .... การรันในฐานะรูทไม่ใช่แนวทางปฏิบัติที่ดีที่สุด ...
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 - ระบบ

เครดิตไปที่Scott Smith


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 Code และทำการเปลี่ยนแปลงบันทึกและดูว่ามีการอัปเดตอัตโนมัติหรือไม่ .


1
ข้อผิดพลาดอื่น ๆ กับเทมเพลตอาจทำให้ไม่สามารถทำงานได้อย่างถูกต้อง ในกรณีของฉันฉันมีองค์ประกอบที่กำหนดเองคาดหวังว่าแต่แอตทริบิวต์เป็นที่ว่างเปล่าเช่นนี้@Input() [myInput]=""เติมด้วยค่าที่เรียกคืนng serveไม่จำเป็นต้องรีเฟรชด้วยตนเอง
Zarepheth

2

ฉันค้นพบว่า dist / โฟลเดอร์ในโปรเจ็กต์เป็นของ root นั่นคือเหตุผลที่sudo ng serveเห็นการเปลี่ยนแปลงเมื่อng serveไม่

ฉันลบโฟลเดอร์ / โฟลเดอร์sudo rm -R dist/และสร้างใหม่เป็นผู้ใช้ปัจจุบันโดยเริ่มต้นเซิร์ฟเวอร์ dev 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 เข้าถึงระบบของคุณ หากสิทธิ์ของคุณถูกต้องปัญหาของฉันอาจเป็นปัญหาของคุณเนื่องจากขีด จำกัด คือต่อผู้ใช้และด้วยการเรียกใช้เป็น sudo คุณกำลังเรียกใช้ในฐานะรูทแทนผู้ใช้ปัจจุบันของคุณที่เกินขีด จำกัด (ใช้งานนาฬิกาหนักเช่น vscode หรืออะตอม บน ). หากมีเหตุผลบางอย่างที่คุณมีสิทธิ์ที่ไม่ถูกต้องพวกเขาตั้งอย่างถูกต้องให้กับผู้ใช้ / chownกลุ่มของคุณด้วย


+1 สำหรับแนะนำให้ใช้chownแทนการวิ่งng serveด้วยsudoซึ่งทุกวิถีทางควรหลีกเลี่ยง!
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 ฉันทำตามวิธีแก้ปัญหาต่อไปนี้แล้ว

เปลี่ยน de angular.json ด้วยพารามิเตอร์แบบสำรวจ

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

ทำงานบนเครื่องของฉัน: D


ขอบคุณ! นี้เป็นวิธีการเฉพาะกิจเพื่อให้ทำงานได้โดยไม่ต้องแก้ไข config npm run ng serve -- --poll=2000ไฟล์: สิ่งนี้ไม่ดีเท่าการตรวจจับการเปลี่ยนแปลงไฟล์ แต่ใช้งานได้กับเครื่องของฉัน (รสชาติของ Ubuntu 18.04) ฉันตั้งค่า max_user_watches เป็น 524288 แต่ng serveยังตรวจไม่พบการเปลี่ยนแปลงหลังจากเวลาผ่านไปสักครู่ ฉันมีสิ่งที่ดีกว่าการตรวจสอบสิ่งนี้ดังนั้นวิธีแก้ปัญหานี้จึงเป็นสิ่งที่ฉันต้องการ
Andrei Sinitson

1

การทำตามsudo ng serveคำสั่งเป็นการปฏิบัติที่ไม่ดี คุณจะต้องเปลี่ยนการnpmได้รับอนุญาตเพื่อที่ทุกเวลาถ้าคุณมีการติดตั้งบางที่คุณไม่จำเป็นต้องใช้npm packagessudo

ลิงก์นี้สามารถแก้ไขวิธีการเปลี่ยนสิทธิ์ npm ให้กับผู้ใช้ปัจจุบันและหลังจากทำตามขั้นตอนนี้หลังจากที่คุณตั้งค่าสิทธิ์ npm แล้วคุณสามารถลบnode_modulesโฟลเดอร์ออกจากไดเร็กทอรีโปรเจ็กต์ของคุณและใช้งานnpm installได้ หลังจากติดตั้งแพ็กเกจเสร็จแล้วคุณสามารถรันได้ng serveและไม่ต้องทำsudo ng serveทุกครั้งที่ต้องการรันโปรเจ็กต์เชิงมุม



0

คำตอบของฉันอาจไม่มีประโยชน์ แต่ฉันค้นหาคำถามนี้เพราะเหตุนี้

หลังจากฉันซื้อคอมพิวเตอร์เครื่องใหม่ฉันลืมตั้งค่าการบันทึกอัตโนมัติในตัวแก้ไข ดังนั้นรหัสจึงไม่เปลี่ยนแปลง


0

ฉันอยากจะฝากกรณีของฉันไว้ที่นี่เพียงเพื่อการอ้างอิง ในกรณีของฉันปัญหาอยู่ที่สิทธิ์ของระบบ ฉันใช้โฟลเดอร์ที่แชร์ภายใน VM เป็น repo ฉันไม่มีข้อความอื่นเช่นการอนุญาตถูกปฏิเสธหรืออะไรบางอย่าง ลองทุกอย่างแล้วฉันก็รู้ว่าฉันใช้ไดรฟ์เครือข่าย




0

ในกรณีของฉันบน Mac ได้รับการแก้ไขโดยให้สิทธิ์อ่าน / เขียนเพื่อเข้าสู่ระบบผู้ใช้ไปที่ / usr / local / lib

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.