Node.JS:出现错误:[nodemon] 内部监视失败:监视 ENOSPC

Posted

技术标签:

【中文标题】Node.JS:出现错误:[nodemon] 内部监视失败:监视 ENOSPC【英文标题】:Node.JS: Getting error : [nodemon] Internal watch failed: watch ENOSPC 【发布时间】:2016-04-12 06:45:35 【问题描述】:

我刚刚在我的Ubuntu 14.04 操作系统上第一次安装了Node.js。我还安装了npm。我安装过程的下一步是安装nodemon。这一切都很好。


但是,当我通过在命令行中输入 nodemon app.js 来运行 nodemon 时,我收到以下错误...

[nodemon] 1.8.1 [nodemon] to restart at any time, enterrs [nodemon] watching: *.* [nodemon] startingnode app.js [nodemon] Internal watch failed: watch ENOSPC

在命令行下面的错误...

alopex@Alopex:~/Desktop/coding_dojo/week-9/javascript/node/testing_node$ Hello World

为什么会这样?这是 nodemon 的正常行为吗?如果没有,我该如何解决?


附注...

1) app.js 是一个 Javascript 文件,其中包含 console.log(111)。 2) node 版本为v0.10.25 3) npm 版本为1.3.10 4) nodemon 版本为1.8.1 5) ubuntu 版本是...

Distributor ID: Ubuntu
Description:    Ubuntu 14.04.3 LTS
Release:    14.04
Codename:   trusty

【问题讨论】:

Grunt watch error - Waiting...Fatal error: watch ENOSPC的可能重复 【参考方案1】:

看来我的最大端口配置不正确。我运行了以下代码,它工作了......

echo fs.inotify.max_user_watches=582222 | sudo tee -a /etc/sysctl.conf && sudo sysctl -p

此命令的作用是增加单个用户允许的观看次数。默认情况下,该数字可以很低(例如 8192)。当nodemon 尝试监视大量目录以进行更改时,它必须创建多个监视,这可能会超过该限制。

您也可以通过以下方式解决此问题:

sudo sysctl fs.inotify.max_user_watches=582222 && sudo sysctl -p

但它最初的编写方式将使这种变化永久化。

【讨论】:

有人能解释一下它的作用并详细说明它为什么会有所帮助吗? @Hinrich,这只是一个猜测,我认为 nodejs 通过 inotify 库监视文件系统的变化。我认为每个用户的最大观看次数有限制,此设置更改为更大的值。 @devrimbaris 正确! 从 Ubuntu 14.04 升级到 Ubuntu 16.04 后,我刚刚发生了这种情况。您的解决方案也对我有用。谢谢 如果你在 Arch 上,请把它放在 /etc/sysctl.d/90-override.conf【参考方案2】:

根据here 的讨论,ENOSPC 表示Error No more hard-disk space availablenodemongulp-nodemon(在我的情况下)需要这么多内存的原因是它正在查看不应该查看的文件夹的内容。为了解决这个问题,nodemon 有 ignore 设置,可以用来告诉 nodemon 什么不要看。查看 nodemon 示例配置 here。

【讨论】:

干得好,这是根本原因。 这就是我的原因。现场对 ENOSPC 的解释。谢谢。【参考方案3】:

我遇到了同样的错误,但在 Windows 10 内的 Ubuntu 14.04 中(Windows 上的 Ubuntu 上的 Bash)。为了克服这个错误,我所做的只是更新 Creators 更新,然后我可以安装 16.04 版本的 Ubuntu bash,然后在安装最新版本的节点(通过this 步骤)之后,我还安装了最新版本的 npm,然后nodemon 开始正常工作。

【讨论】:

【参考方案4】:

除了指定要忽略的目录列表(例如否定),您还可以指定要监视的目录列表(例如肯定):

nodemon --watch dir1 --watch dir2  dir1/examples/index.js

在我的特定情况下,我有一个想要查看的目录和大约九个想要忽略的目录,因此指定“--watch”比指定“--ignore”要简单得多

【讨论】:

谢谢,我的 nodemon 在 docker 容器中多次重启,并且需要很长时间才能重新加载服务器。为我的 src 文件夹添加了手表,速度快如闪电。【参考方案5】:

在您的根文件夹中添加一个nodemon.json 配置文件并指定忽略模式,例如:

nodemon.json


  "ignore": [
    "*.test.js", 
    "dist/*"
  ]

请注意,默认情况下 .gitnode_modulesbower_components.nyc_outputcoverage.sass-cache 会被忽略,因此您无需将它们添加到您的配置中。

解释:发生此错误是因为您超出了系统允许的最大观察者数量(即nodemon 没有更多磁盘空间来观看所有文件 - 这可能意味着您正在观看不重要的文件)。因此,您会忽略不关心更改的非重要文件,例如构建输出或测试用例。

【讨论】:

【参考方案6】:
[nodemon] Internal watch failed: watch /home/Document/nmmExpressServer/bin ENOSPC
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! nmmexpressserver@0.0.0 start: `nodemon ./bin/www`
npm ERR! Exit status 1
npm ERR! 
npm ERR! Failed at the nmmexpressserver@0.0.0 start script.

这是我在运行nodemon ./bin/www时遇到的错误。

解决方案是关闭 Atom 窗口,该窗口在项目窗口中打开了整个文件夹目录。

我不知道为什么,但我假设 Atom 和 nodemon 使用类似的进程来监视文件/文件夹。

【讨论】:

这正是我的问题。我很高兴从项目的安装目录中启动 atom。我关闭了 atom,从另一个目录启动它,问题就消失了。 在我的例子中,同样的情况也发生在 Ubuntu 的 Sublime 上。当我关闭 IDE 时,我可以正常运行它。有什么建议吗? 我没有尝试复制它以查看它是否已修复。 谢谢。关闭 Gitkraken 后,我的可以工作。这是一个奇怪的问题。所以这意味着我们不能让两个进程监视同一个文件夹? 这里是 Nextcloud 客户端 - 它使用了大量的 inotify 手表。谢谢大家!【参考方案7】:

埃里克, 您可以通过

杀死所有其他节点进程

pkill -f 节点

然后重新启动您的服务器。到时候就好了。

【讨论】:

投反对票,因为这也导致我的 Visual Studio Code 窗口冻结。 这就像一个魅力......直到现在!现在它无效,得到同样的错误。 如果你有多个使用节点运行的东西,这将导致它们全部停止。如果您同时运行客户端和服务器,这尤其麻烦。 这不是答案,这是评论【参考方案8】:

在运行节点服务器上显示以下错误和解决方案:

nodemon server.js

[nodemon] 1.17.2

[nodemon]随时重启,输入rs

[nodemon] 观看:.

[nodemon] 开始 node server.js

[nodemon] 内部监视失败:监视 /home/aurum304/jin ENOSPC

sudo pkill -f node

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

【讨论】:

小心使用“sudo pkill -f node”命令。它强制杀死所有正在运行的节点应用程序。某些应用程序(例如 Atom、vscode)依赖于节点,因此此命令可能会使这些应用程序崩溃,您可能会失去工作。也不保证无论如何都有效。第二个更好。【参考方案9】:

在我的情况下,关闭 Visual Studio 代码然后启动服务器就可以了

操作系统 - ubuntu 16.4 lts

node.js 版本 - 8.11.1

npm 版本 - 6.0.0

【讨论】:

他好像没有使用visual studio。 虽然这并不能直接回答问题(因为问题不涉及VS Code),但这确实解决了我的问题。 谢谢,很简单,它解决了我的问题:)【参考方案10】:

试试这个....

echo fs.inotify.max_user_watches=524288 | sudo tee -a /etc/sysctl.conf && sudo sysctl -p​

【讨论】:

我喜欢这种反抗的叛逆本性【参考方案11】:

如果操作系统是Linux,那么只要使用它就可以工作

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

【讨论】:

我也遇到过同样的问题。我听从了你的意见。它现在工作。谢谢。【参考方案12】:
echo fs.inotify.max_user_watches=524288 | sudo tee -a /etc/sysctl.conf && sudo sysctl -p

这对我有用

【讨论】:

请添加解释如何回答这个问题。 正常工作【参考方案13】:

尝试使用您的 app.js 所在的更多特定目录重新打开 VS 代码或 Atom。 我打开了很多文件夹,出现了这个问题。但是一旦我打开我的特定文件夹并再次尝试,它就起作用了。

【讨论】:

【参考方案14】:

一定有比我建议的更好的方法来解决这个问题。我希望一些专家登陆这个页面。另请注意,我正在开发服务器上工作,因此有能力杀死节点的所有进程。这可能不是您想要的。

我按照@zubair-alam 的回答第一次把它修好了。我在 package.json 中添加了“忽略”(即使引用的链接说它是默认值)。

 ........ Before
  "ignore": [
    ".git",
    "node_modules/**/node_modules"
  ],
  "scripts": 
    "test": "echo \"Error: no test specified\" && exit 1",
    "start": "nodemon ./index.js --exec babel-node -e js"
  ,
 ........ After

但是,一旦我将新文件添加到文件夹中,错误就会再次返回。我在 Linux 上工作,所以我基本上杀死了所有与节点相关的进程,通过说以下内容。

killall node

然后通过说重新启动npm。服务器启动时没有错误。

npm start

您必须使用特定于您的操作系统的命令来更改 killall 命令。请参阅this 讨论。

【讨论】:

以上是关于Node.JS:出现错误:[nodemon] 内部监视失败:监视 ENOSPC的主要内容,如果未能解决你的问题,请参考以下文章

无法安装 nodemon node.js

报错:‘nodemon‘ 不是内部或外部命令,也不是可运行的程序 或批处理文件。

Node.js 第三方模块 nodemon(自动编译)使用

Node.js - nodemon vs node - 开发与生产

nodemon 没有在 webpack-typescript-node.js 中监视目录?

node工具之nodemon