每次对源文件进行任何更改时,我都需要运行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 serve
或ng 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 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 --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
以启用自动保存。
问题将得到解决。