ng phục vụ không phát hiện các thay đổi tệp tự động


110

Tôi cần chạy ng servemọi lúc khi có bất kỳ thay đổi nào đối với tệp nguồn. Tôi không gặp lỗi trong bảng điều khiển.

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
Bạn đã thử phục vụ - đồng hồ chưa?
Planet_hunter

2
Đúng. Nhưng nó không giải quyết được vấn đề của tôi
Bhaskararao Gummidi

Vui lòng kiểm tra câu trả lời cập nhật của tôi và cho tôi biết nếu nó giải quyết được vấn đề.
Planet_hunter

Câu trả lời:


151

Hầu hết các trường hợp trong Linux, ng servehoặc ng build --watchkhông hoạt động nếu thư mục không có đủ quyền.

Giải pháp là cung cấp các quyền cần thiết hoặc sử dụng sudothay thế.

CẬP NHẬT

cờ xem trong ng servethực tế là thừa vì nó là tùy chọn mặc định. Ghi có cho @Zaphoid vì đã chỉ ra sai sót.


29
Cảm ơn bạn. Tôi chạy ng servevới sudoquyền. Nó đã hoạt động.
Bhaskararao Gummidi

1
Sau đó, xin vui lòng chấp nhận điều này là câu trả lời, sẽ giúp những người đọc câu hỏi này trong tương lai
Mawg nói Khôi phục Monica

3
@Mawg Thay vì sử dụng sudo. Tập hợp quyền nào mà tệp phải có?
oracleruiz

2
Phụ thuộc vào người dùng đang chạy, có thể nhiều như vậy a+x, nhưng tôi cảnh báo không nên sử dụng quyền, thay vì sử dụng quyền sudo. sudolà dành cho một lệnh duy nhất, trong khi việc thay đổi quyền sẽ thay đổi chúng mãi mãi, điều này có vẻ là một rò rỉ bảo mật lớn hơn.
Mawg nói hãy phục hồi Monica

5
--watchkhông cần thiết, vì nó là mặc định, hãy xem angle.io/cli/serve . Vì vậy, @T. Câu trả lời của van den Berg thực sự chính xác hơn!
Zaphoid

126
ng serve --poll=2000

Hoạt động tốt trong linux và windows


19
nó có nghĩa là gì (--poll)
HD ..

1
Có thể xác nhận điều này hoạt động. Chạy hệ thống con linux trên WIndows 10 (Ubuntu) với VS Code chạy trên Windows.
Ales Potocnik Hahonina

Hoạt động trên ubuntu 18.0.4
Nishān Wickramarathna 27/02/19

2
Điều đó đã hoạt động trên ubuntu 18.04. bạn có thể vui lòng mô tả lý do của nó?
Vijender Kumar

2
Đối với tôi hoạt động tốt! Nhưng, tôi không hiểu nguyên nhân "ng phục vụ" không tải lại dự án.
José Luiz Gonzaga Neto

81

Hãy xem xét rằng, khi có một số lượng lớn tệp, có một Giới hạn tại INotify Watches trên Linux. Vì vậy, tăng giới hạn đồng hồ lên 512K chẳng hạn, có thể giải quyết vấn đề này.

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

Lưu ý rằng phần trước gây ra thay đổi trong bộ nhớ mà bạn sẽ mất sau khi khởi động lại.

Tuy nhiên, bạn có thể làm cho nó tồn tại lâu dài bằng cách thực hiện:

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

Để tham khảo, bạn có thể kiểm tra: https://github.com/angular/angular-cli/issues/8313#issuecomment-362728855https://github.com/guard/listen/wiki/Increasing-the-amount- of-inotify-watchers


5
Điều này đã làm việc cho tôi trên 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
bạn có thể sử dụng lệnh này để kiểm tra / kiểm tra giới hạn đồng hồ hiện tại cat /proc/sys/fs/inotify/max_user_watches Câu trả lời trên là một câu trả lời hoàn toàn đầy đủ nhưng đây là một liên kết với ít mô tả hơn confluence.jetbrains.com/display/IDEADEV/Inotify+Watches+Limit
Junaid

hoạt động tốt. cần lưu ý rằng một số IDE (như JetBrains Webstorm) cũng sử dụng inotify để theo dõi các thay đổi của tệp. vì vậy, hãy ghi nhớ nó nếu bạn mở 5 dự án và hơn chạy ng phục vụ.
Multis

25

Bởi vì, hệ thống phát hiện thay đổi không thể xử lý quá nhiều đồng hồ theo mặc định.

Và giải pháp là để change the amount of watchesnó có thể xử lý (số lượng tệp tối đa sẽ có trong dự án) bạn phải run this command:

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

Vấn đề với inotify là gửi lại bộ đếm này mỗi khi bạn khởi động lại máy tính của mình.


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

18

Trong thư mục phân phối dự án của bạn được sở hữu bởi root

Cố gắng sử dụng sudo ng servethay vì ng serve.

Giải pháp khác

Khi có một số lượng lớn tệp watch không hoạt động trong linux. Có một giới hạn tại INotify Watches trên Linux. Vì vậy, tăng giới hạn đồng hồ

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

Chỉ cần chạy sudo ng phục vụ để giải quyết vấn đề.


5
Đẹp workaround nhưng tại sao phải làm như vậy là câu hỏi thực sự .... chạy bằng root không phải là thực hành tốt nhất ...
Pipo

5

Điều này có thể hữu ích nếu nó là cùng một vấn đề tôi đã gặp phải. Cố gắng sử dụng ng serveng build --watchđôi khi có hiệu quả nhưng chủ yếu là họ không theo dõi các thay đổi mã và tôi nghĩ đó là điều cần làm ng.

Sau đó, tôi nhớ ra một vấn đề tôi đã gặp phải với đồng hồ inotify

Tôi đã chạy điều này trên máy Ubuntu của mình và có vẻ như nó đã khởi động và xem các thay đổi mã:

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

tín dụng được chuyển đến Scott Smith


3

thử cái này. Nếu bạn làm như vậy, bạn không cần phải bắn luôn bất kỳ lệnh nào Bạn chỉ cần bắn một lần

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

Không phù hợp với tôi:

ng serve --watch

Thử :

sudo ng serve

điều này đã làm việc cho tôi!


2

Nếu vẫn không thành công, hãy kiểm tra mã của bạn để tìm lỗi cú pháp - đặc biệt là trên index.htmlhoặc các phần mã mà bạn đã chỉnh sửa gần đây ngay trước khi bản cập nhật tự động này bị hỏng . Lỗi cú pháp sẽ phá vỡ chức năng cập nhật tự động này trong Angular.

Trong trường hợp của tôi, tôi đã mở nhiều dự án trong các cửa sổ VS Code riêng biệt. Trên tất cả các dự án khác của tôi, ng servehoạt động như mong đợi: nó tự động cập nhật khi lưu. Nhưng trên một dự án, nó sẽ yêu cầu làm mới thủ công để cập nhật. Cuối cùng là do tôi có các nhận xét html bên ngoài vùng HTML được xác định của mẫu (vì vậy, các nhận xét HTML đã xuất hiện trước đó <!doctype html>. Vì vậy, nó không hợp lệ bc đó là cú pháp HTML bên ngoài vùng HTML.

Tôi đã xóa các nhận xét và bam, tự động cập nhật bắt đầu hoạt động trở lại (sau một lần làm mới thủ công nữa).

Vì vậy, hãy xem qua index.htmlhoặc các phần khác của mã mà bạn đã chỉnh sửa gần đây trước khi điều này bị hỏng và từng phần một, cắt các phần sơ sài, làm mới trong trình duyệt, sau đó quay lại Mã VS và thực hiện thay đổi, lưu và xem nó có tự động cập nhật không .


1
Các lỗi khác với Mẫu cũng có thể khiến Mẫu hoạt động không chính xác. Trong trường hợp của tôi, tôi đã tùy chỉnh thành phần mong đợi một @Input(), nhưng thuộc tính trống rỗng, như thế này: [myInput]="". Điền vào nó với một giá trị được khôi phục ng serve, không cần làm mới thủ công.
Zarepheth

2

Tôi phát hiện ra rằng thư mục dist / trong dự án thuộc quyền sở hữu của người chủ. Đó là lý do tại sao sudo ng servenhìn thấy những thay đổi khi ng servekhông.

Tôi đã xóa thư mục dist / sudo rm -R dist/và xây dựng lại nó như người dùng hiện tại bằng cách khởi động máy chủ nhà phát triển ng servevà tất cả đều hoạt động trở lại.


2

Tôi đang gặp sự cố này trên bản cài đặt Linux Ubuntu mới và nhận thấy rằng tôi gặp lỗi 'quá nhiều người theo dõi quá giới hạn' trong VSCode cùng một lúc. Tôi đã làm theo hướng dẫn để khắc phục nó trong VSCode và nó cũng đã khắc phục sự cố với ng watch. Thông tin thêm tại đây https://code.visualstudio.com/docs/setup/linux#_visual-studio-code-is-unable-to-watch-for-file-changes-in-this-large-workspace-error-enospc

Tôi nhận thấy mọi người đề nghị sudochạy theo dõi. Đây là một trò chơi nguy hiểm, bạn đang cấp quyền truy cập root cho gói npm vào hệ thống của mình. Nếu quyền của bạn là chính xác, vấn đề của tôi có thể là cách khắc phục của bạn vì giới hạn là cho mỗi người dùng và bằng cách chạy dưới dạng sudo, bạn đang chạy với quyền root thay vì người dùng hiện tại của bạn đã vượt quá giới hạn (chạy đồng hồ lý tưởng nặng như vscode hoặc atom trên ). Nếu vì lý do nào đó bạn có quyền sai, hãy đặt chúng đúng cách cho người dùng / nhóm của bạn với chown.


+1 để đề xuất sử dụng chownthay vì chạy ng servevới sudo, điều này nên tránh bằng mọi cách!
Tobi

1

Tôi đã gặp vấn đề tương tự, sử dụng sudo ng servedường như "giải quyết" vấn đề không tốt. Sử dụng sudoIMO không đạt yêu cầu.

Tôi đã kiểm tra số lượng INotify so với giới hạn mặc định của mình (8192) bằng cách sử dụng: lsof | grep inotify | wc -l Giá trị được trả về bởi lệnh trên nhỏ hơn giới hạn. Vì vậy, giải pháp INotify dường như không áp dụng cho vấn đề của tôi.

Tôi cũng đã kiểm tra quyền và quyền sở hữu, cả hai đều có vẻ ổn, có thể so sánh với một dự án khác đã hoạt động.

Vì thất vọng, tôi đã khởi động lại VS Code. Về cơ bản, tôi đã đóng tất cả các phiên bản, tôi đã chạy và mở lại cả hai phiên bản sau đó sự cố đã biến mất.

Tôi đang nghiêng về một lỗi có thể xảy ra ở đâu đó. Đây là điều cần xem xét trước khi chuyển hệ thống của bạn từ trong ra ngoài. May mắn thay / Thật không may, sự cố này đã không xảy ra một lần nữa, tôi sẽ tìm hiểu sâu hơn nếu nó xảy ra.



1

Tôi không khuyên bạn nên thay đổi các thông số SO. Tôi đã gặp một số vấn đề (độ trễ) sau khi thay đổi thông số fs.inotify.max_user_watches vì ​​bạn sẽ có các dịch vụ khác đang chạy ...

"Ng serve --poll = 2000" là một giải pháp tốt nhưng có thể bạn sẽ quên tham số này ...

Đang điều tra: https://github.com/angular/angular-cli/wiki/angular-cli Tôi đã thực hiện giải pháp sau.

Đã thay đổi de angle.json với tham số thăm dò

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

Hoạt động trên máy của tôi: D


Cảm ơn bạn! Đây là quảng cáo hoc cách để chạy nó mà không sửa đổi tập tin cấu hình: npm run ng serve -- --poll=2000. Điều này không tốt như phát hiện thay đổi tệp, nhưng chỉ hoạt động trên máy của tôi (phiên bản doanh nghiệp của Ubuntu 18.04). Tôi đã đặt max_user_watches thành 524288, nhưng ng servevẫn không phát hiện được các thay đổi sau một thời gian. Tôi có nhiều việc tốt hơn để làm điều này, vì vậy giải pháp này là những gì tôi cần.
Andrei Sinitson

1

Thực hiện sudo ng servelệnh là một thực hành xấu. Bạn phải thay đổi npmquyền để mỗi khi phải cài đặt một số, npm packagesbạn không cần phải sử dụng sudo.

Liên kết này có thể giải quyết cách thay đổi quyền npm cho người dùng hiện tại và sau khi thực hiện theo các bước này sau khi bạn đặt quyền npm, bạn có thể xóa node_modulesthư mục khỏi thư mục dự án của mình và sử dụng npm install. Sau khi hoàn thành cài đặt các gói, bạn có thể chạy ng servevà bạn không cần phải làm sudo ng servemỗi khi muốn chạy dự án góc cạnh của mình.



0

Câu trả lời của tôi có thể không hữu ích. nhưng tôi tìm kiếm câu hỏi này vì điều này.

Sau khi tôi mua một máy tính mới, tôi quên đặt tự động lưu trong trình chỉnh sửa. Do đó, mã thực sự không thay đổi.


0

Tôi xin để trường hợp của tôi ở đây, chỉ để tham khảo. Trong trường hợp của tôi, vấn đề nằm ở quyền hệ thống. Tôi đã sử dụng một thư mục được chia sẻ bên trong một máy ảo làm kho lưu trữ. Tôi không có thông báo nào khác như quyền bị từ chối hoặc gì đó. Đã thử mọi thứ và sau đó tôi chỉ nhận ra rằng tôi đang sử dụng một ổ đĩa mạng.




0

Trong trường hợp của tôi trên Mac, nó đã được khắc phục bằng cách cấp quyền Đọc / Ghi cho người dùng đã đăng nhập vào / usr / local / lib

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.