ng 服务不会自动检测文件更改



每次对源文件进行任何更改时,我都需要运行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

大多数时候,在 Linux 中,如果目录没有足够的权限,ng serveng build --watch不起作用。

解决方案是提供必要的权限或改用sudo

更新

ng serve中的监视标志实际上是多余的,因为它是默认选项。感谢@Zaphoid指出错误。

ng serve --poll=2000

在Linux和Windows中工作正常

考虑到,当有大量文件时,Linux 上的INotifyWatches 有一个限制。例如,将手表限制增加到 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-of-inotify-watchers

因为,默认情况下,检测更改的系统无法处理这么多监视。

解决方案是change the amount of watches它可以处理(项目中将包含的最大文件数量),您必须run this command

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

inotify 的问题是每次重新启动计算机时重置此计数器。

在您的项目中,dist 文件夹由根目录拥有

尝试使用sudo ng serve而不是ng serve

另一种解决方案

当有大量文件时,监视不起作用 Linux。Linux 上的 INotify Watches 有一个限制。所以增加 手表限制

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

只需要运行sudong serve 即可解决问题。

如果这是我遇到的相同问题,这可能会有所帮助。 尝试使用ng serveng build --watch有时有效,但大多数情况下他们没有关注代码更改,我认为这与ng有关。

然后我想起了我前段时间遇到的一个问题 艾诺手表

我在我的 Ubuntu 机器上运行了这个,它似乎已经启动并观察代码更改:

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

功劳归于斯科特·史密斯

我不建议更改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

试试这个。 如果你这样做,你不需要总是触发任何命令 您只需要开火一次

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

如果所有其他方法都失败了,请检查您的代码是否存在语法错误 - 特别是在index.html上,或者您最近在此自动更新中断之前编辑的部分代码。语法错误将破坏 Angular 中的此自动更新功能。

就我而言,我在单独的 VS Code 窗口中打开了多个项目。在我的所有其他项目中,ng serve按预期工作:它在保存时自动更新。但是在一个项目中,它需要手动刷新才能更新。最终是因为我在模板定义的 HTML 区域之外有 html 注释(因此,HTML 注释出现在<!doctype html>之前。所以它是无效的 bc 它是 HTML 区域之外的 HTML 语法。

我删除了评论并砰的一声,自动更新再次开始工作(在再次手动刷新后)。

因此,请逐一浏览您最近编辑的代码index.html或其他部分,将粗略的部分剪掉,在浏览器中进行刷新,然后返回 VS Code 并进行更改,保存并查看它是否自动更新。

我发现项目中的dist/文件夹归root所有。这就是为什么sudo ng serve确实看到了变化,而ng serve却没有。

我删除了dist/文件夹sudo rm -R dist/并通过启动开发服务器ng serve将其重建为当前用户,然后一切再次工作。

我在新的 Linux Ubuntu 安装上遇到了这个问题,并注意到我同时在 VSCode 中收到关于"太多观察者无法限制"的错误。我按照说明在VSCode中修复了它,它还解决了ng手表的问题。更多信息请点击此处 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包root访问你的系统。如果您的权限正确,我的问题可能是您的修复,因为限制是按用户运行的,并且通过以 sudo 身份运行,您以 root 身份运行,而不是以超过限制的当前用户身份运行(运行像 vscode 或 atom 这样的监视密集型 IDE)。如果由于某种原因您拥有错误的权限,请使用chown将它们正确设置为您的用户/组。

对我不起作用:

ng serve --watch

尝试:

sudo ng serve

这对我有用!

我遇到了同样的问题,使用sudo ng serve似乎不令人满意地"解决"了问题。使用sudo并不令人满意 IMO。

我使用以下方法检查了我的 INotify 计数与默认限制 (8192): lsof | grep inotify | wc -l 上述命令返回的值远小于限制。 因此,INotify解决方案似乎不适用于我的问题。

我还检查了权限和所有权,两者似乎都还可以,可以与另一个有效的项目相媲美。

出于沮丧,我重新启动了VS Code。 基本上我关闭了所有实例,我有两个正在运行并重新打开了两个实例,然后问题消失了。

我倾向于某处可能存在的错误。这是在将系统翻过来之前要考虑的事情。 幸运的是/不幸的是,这个问题没有再次发生,如果确实如此,我会更深入地挖掘。

你也可以试试这个。

sudo ng serve

执行sudo ng serve命令是一种不好的做法。您必须更改npm权限,以便每次都必须安装某些npm packages则不必使用sudo.

此链接可以解决如何将 npm 权限更改为当前用户,并且在设置 npm 权限后完成此步骤后,您可以从项目目录中删除node_modules文件夹并使用npm install。完成软件包安装后,您可以运行ng serve,并且不必每次要运行角度项目时都执行sudo ng serve

我的回答可能没有用。 但正因为如此,我搜索这个问题。

购买新电脑后,我忘记在编辑器中设置自动保存。因此,代码实际上保持不变。

表示窗口 -

c:>ng serve --open

对于 Linux -

$sudo ng serve --open

我想把我的情况留在这里,仅供参考。就我而言,问题出在系统权限上。我使用 VM 中的共享文件夹作为存储库。我没有其他消息,例如拒绝许可或其他信息。尝试了一切,然后我才意识到我使用的是网络驱动器。

授予项目文件夹的完全权限对我有用

就我在Mac上而言,它是通过授予登录用户到/usr/local/lib的读/写权限来修复的

重新启动服务器对我有用。

对我来说,有效的是:

rm -rf node_modules && npm install

然后

ng serve

在ng服务之前使用sudo,它将起作用。在终端类型中 : '须藤恩服务'

重新启动 IDE 为我完成了这项工作。我正在使用 VS 代码

如果您使用的是vsCode,也许您忘记启用Auto Save

转到并选择File > Auto Save以启用自动保存。

问题将得到解决。

最新更新