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
137698 次浏览

在 Linux、 ng serveng build --watch中,大多数情况下,如果目录没有足够的权限,就无法工作。

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

更新

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

因为,检测更改的系统在默认情况下不能处理这么多的手表。

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

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

Inotify 的问题是每次重新启动计算机时都要重新设置此计数器。

只需运行 Sudong 服务器就可以解决这个问题。

如果所有这些都失败了,请检查代码是否存在语法错误——特别是在 index.html上,或者在这个自动更新中断之前您最近编辑的部分代码上。语法错误将打破这个角度自动更新功能。

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

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

因此,通过 index.html或其他部分的代码,你最近编辑的代码,你最近打破和一个一个,删除粗略的部分,在浏览器中做一个刷新,然后回到 VS 代码,作出更改,保存,看看它是否自动更新。

ng serve --poll=2000

在 Linux 和 Windows 中工作良好

考虑到,当有大量文件时,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-362728855Https://github.com/guard/listen/wiki/increasing-the-amount-of-inotify-watchers

我发现项目中的 dist/文件夹属于 root 用户。这就是为什么 sudo ng serve能看到变化,而 ng serve不能。

我删除了 dist/文件夹 sudo rm -R dist/,并通过启动 dev 服务器 ng serve将其重新构建为当前用户,所有这些都可以正常工作。

您的项目 dist 文件夹中的文件是由 root 用户拥有的

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

另一个解决办法

当有大量的文件在手表中不工作时 在 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**

我有同样的问题,使用 sudo ng serve似乎“解决”的问题不令人满意。使用 sudo是不令人满意的 IMO。

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

我还检查了权限和所有权,两者看起来都不错,与另一个工作的项目相当。

出于沮丧,我重新启动了 VS 代码。基本上,我关闭了所有的实例,我有两个运行和重新打开后,问题消失了。

我觉得可能是哪里有窃听器。这是在彻底改变你的系统之前需要考虑的事情。幸运的是/不幸的是,这个问题没有再次发生,如果发生了,我将深入研究。

我在安装一个新的 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 包根访问您的系统。如果您的权限是正确的,我的问题可能是您的修复,因为限制是每个用户,并且通过运行 sudo,您是以 root 用户身份运行,而不是以超过限制的当前用户身份运行(运行一个像 vscode 或 atom 这样的手表重载)。如果由于某种原因您拥有错误的权限,请使用 chown将它们正确地设置为您的用户/组。

你也可以试试这个。

sudo ng serve

如果问题和我一样,这可能会有帮助。 尝试使用 ng serveng build --watch有时工作,但大多数情况下,他们没有看到代码的变化,我认为这是与 ng有关。

然后我想起了前阵子的一个问题 通知手表

我在我的 Ubuntu 机器上运行这个程序,它似乎起作用了,并且看到了代码的变化:

Echo fs.inotify.max _ user _ watch = 524288 | sudo tee/etc/sysctl.d/40-max-user-watch. conf & & sudo sysctl —— system

功劳归 斯科特 · 史密斯

我不建议改变 SO 参数。 在更改 fs.inotify.max _ user _ watch 参数之后,我遇到了一些(延迟)问题,因为您将运行其他服务..。

“ ng service —— poll = 2000”是一个很好的解决方案,但是您可能会忘记这个参数..。

调查: < a href = “ https://github.com/angle/angle-cli/wiki/angle-cli”rel = “ nofollow norefrer”> https://github.com/angular/angular-cli/wiki/angular-cli 我做了下面的解决方案。

使用 poll 参数更改 de angular.json

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

在我的机器上工作: D

执行 sudo ng serve命令是一种糟糕的做法。您必须更改 npm权限,以便每次如果您必须安装一些 npm packages,您不必使用 sudo

这个链接 可以解决如何将 npm 权限更改为当前用户的问题,在设置 npm 权限之后,通过这些步骤,您可以从项目目录中删除 node_modules文件夹并使用 npm install。完成包安装后,你可以运行 ng serve,你不必做 sudo ng serve每次你想运行你的角项目。

我的答案可能没有用。但我搜索这个问题是因为这个。

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

我想把我的案子留在这里,作为参考。在我的例子中,问题出在系统权限上。我使用虚拟机中的共享文件夹作为回购文件。我没有其他信息,比如拒绝许可什么的。我什么都试过了,然后我意识到我用的是网络硬盘。

重启服务器对我有用。

试试这个。 如果你这样做,你不需要总是发射任何命令 你只需要开一枪

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

对我不起作用:

ng serve --watch

试试:

sudo ng serve

这招对我管用!

窗户-

c:\>ng serve --open

为 Linux-

$sudo ng serve --open

给予项目文件夹的完全许可对我来说很有效

在我的 Mac 上,通过授予/usr/local/lib 登录用户的读/写权限来解决这个问题

对我来说,有效的方法是:

rm -rf node_modules && npm install

然后

ng serve

我有同样的问题,并指出,在我的角项目的一些文件只允许用户 root和相应的组 root。你可以用 ls -hal检查一下。我通过将两者都设置为与我一起使用系统的用户来修复它。

你可以这样做: chown -R username:groupname *

如果你想知道这个命令到底是做什么的,检查:

Https://superuser.com/questions/462141/how-to-chown-chmod-all-files-in-current-directory

在服务之前使用 sudo 它将工作。在终端类型 歌曲: ‘ sudo ng service’

重新启动 IDE 就可以了,我用的是 VS 代码

如果使用 vsCode,可能忘记启用 Auto Save

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

问题就解决了。