ng不会自动检测文件更改

时间:2018-01-04 10:04:14

标签: angular

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

26 个答案:

答案 0 :(得分:68)

如果目录没有足够的权限,Linux中的大部分时间ng serve --watchng build --watch都不起作用。

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

<强>更新

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

答案 1 :(得分:58)

ng serve --poll=2000

在linux和windows中正常工作

答案 2 :(得分:28)

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

答案 3 :(得分:21)

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

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

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

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

答案 4 :(得分:7)

在您的项目dist文件夹中,root用户拥有

尝试使用sudo ng serve代替ng serve

另一种解决方案

当有大量文件时,手表无法工作  linux.Linux上的INotify监视有一个限制。所以增加  手表限制

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

答案 5 :(得分:6)

只需运行 sudo ng服务即可解决此问题。

答案 6 :(得分:3)

适用于使用Windows的用户 命令ng serve --poll = 2000也可以。

ng serve --poll=2000

答案 7 :(得分:3)

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

然后我想起了我前一段时间遇到的一个问题 inotify watches

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

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

贷方转到Scott Smith

答案 8 :(得分:2)

我发现项目中的dist /文件夹归root用户所有。这就是sudo ng serveng serve未看到更改的情况下的原因。

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

答案 9 :(得分:2)

您也可以尝试。

sudo ng serve

答案 10 :(得分:1)

不是为我工作:

ng serve --watch

尝试:

sudo ng serve

这对我有用!

答案 11 :(得分:1)

尝试一下。 如果您这样做,就不必总是触发任何命令 您只需要开火

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

答案 12 :(得分:1)

用于窗口-

c:\>ng serve --open

对于Linux-

$sudo ng serve --open

答案 13 :(得分:1)

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

This link可以解决如何更改当前用户的npm权限,并且在设置npm权限后按照此步骤操作之后,可以从项目目录中删除node_modules文件夹并使用{{1 }}。软件包安装完成后,您可以运行npm install,而不必每次都运行ng serve时要运行角度项目。

答案 14 :(得分:1)

我在新安装的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软件包授予对系统的root访问权限。如果您的权限是正确的,那么我的问题可能就是您的解决方法,因为限制是针对每个用户的,并且通过以sudo身份运行,您将以root身份运行,而不是超出限制的当前用户(运行诸如vscode或atom之类的watch ideide上 )。如果由于某种原因您拥有错误的权限,请使用chown将它们正确地设置给您的用户/组。

答案 15 :(得分:0)

对我来说有效的是:

rm -rf node_modules && npm install

然后

ng serve

答案 16 :(得分:0)

在我的Mac电脑上,已通过向/ usr / local / lib授予登录用户的读取/写入权限来解决此问题

答案 17 :(得分:0)

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

答案 18 :(得分:0)

我遇到了同样的问题,发现Angular Project中的某些文件只允许用户root和相应的组root使用。您可以使用ls -hal进行检查。我通过将两者都设置为与系统一起使用的用户来修复它。

您可以执行以下操作: chown -R username:groupname *

如果您想知道此命令的确切功能,请检出:

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

答案 19 :(得分:0)

在 ng serve 之前使用 sudo 它将起作用。在终端类型 : 'sudo ng serve'

答案 20 :(得分:0)

重新启动服务器为我工作。

答案 21 :(得分:0)

我想把案例留在这里,仅供参考。就我而言,问题出在系统权限上。我将VM内的共享文件夹用作存储库。我没有其他消息,例如权限被拒绝或类似的东西。尝试了所有内容,然后我才意识到自己正在使用网络驱动器。

答案 22 :(得分:0)

我的回答可能没有用。但由于这个原因,我搜索了这个问题。

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

答案 23 :(得分:0)

我不建议更改SO参数。 更改fs.inotify.max_user_watches参数后,我遇到了一些(滞后)问题,因为您将要运行其他服务...

“ ng serve --poll = 2000”是一个很好的解决方案,但您可能会忘记此参数...

调查:https://github.com/angular/angular-cli/wiki/angular-cli 我已经完成了以下解决方案。

使用poll参数更改了de angular.json

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

在“我的机器”上工作:D

答案 24 :(得分:0)

我遇到了同样的问题,使用sudo ng serve似乎不能令人满意地“解决”该问题。使用sudo不能满足IMO要求。

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

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

出于无奈,我重新启动了VS Code。基本上,我关闭了所有实例,运行了两个实例,然后都重新打开了实例,然后问题就消失了。

我倾向于某个地方可能存在的错误。这是将系统内翻前要考虑的事情。幸运的是,这个问题没有再发生,如果有的话,我会做更深入的探讨。

答案 25 :(得分:0)

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

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

我删除了评论和bam,自动更新再次开始工作(再次手动刷新后)。

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

相关问题