【问题标题】:Node.JS: Getting error : [nodemon] Internal watch failed: watch ENOSPCNode.JS:出现错误:[nodemon] 内部监视失败:监视 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

【问题讨论】:

标签: javascript node.js


【解决方案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 讨论。

        【讨论】:

          猜你喜欢
          • 2018-04-06
          • 2018-10-08
          • 2020-08-04
          • 2020-05-05
          • 2021-04-07
          • 1970-01-01
          • 2021-04-19
          • 2016-07-22
          • 2015-01-24
          相关资源
          最近更新 更多