问题标签 [watchman]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
2187 浏览

javascript - 初始化 react-native 项目时出现“错误监视文件以进行更改:EMFILE”

我想启动一个 react-native 项目,步骤:

react-native init testproject 然后 react-native run-ios

操作系统版本:OS X 10.12

0 投票
1 回答
184 浏览

watchman - 守望者通知后立即读取的文件为空

我正在通过 JVM 程序中的 socket/bser 接口集成 watchman。

我看到奇怪的时机:

  1. 构建系统写入一个文件(一个小文本文件)
  2. 我在 bser 界面上收到守望通知
  3. 线程 A 监听 bser 订阅通知将更新放到一个单独线程的队列中
  4. 线程 B 读取队列,读取更改的文件,然后将文件的数据放到网络上

但是,不知何故,线程 B 正在读取一个空文件。

我假设在某些时候它是有效的空,例如 IO/系统调用可能是:

  1. 清除文件内容
  2. 写入块 1
  3. 写入块 2
  4. 关闭文件

我假设我的线程 B 正在步骤 1 和 2 之间读取文件。或者可能是 1 和 4,如果 4 是刷新结果的时间。

我的困惑有两个方面:

1)我认为守望者的默认 20 毫秒等待会解释这样的事情,而且我只会在我的线程 A 上看到更新,更不用说当我的线程 B 在第 4 步之后进行读取并且数据完成写入时文件。

2)即使守望者确实“过早地”告诉我第一个系统调用(比如步骤 1),并且我在它是一个空文件时读取了结果,应该还有另一个系统调用/守望者通知“顺便说一句,文件有一些现在的内容”。

FWIW/奇怪的是,我在使用 Java WatchService API 时看到了同样的行为,在那里我会得到一个 inotify 事件,但是“太快”读取一个文件,所以得到空的或部分的结果,然后没有跟进当其余数据可用时通知事件。

我认为这是WatchService的侥幸/细微差别,所以我当时通过在读取文件之前检查文件修改时间来解决它,并在假设文件“完成”写入之前等待确保修改时间> 2秒.

(请注意,这也处理了大约 100mb+ 的文件正在写入,其中构建过程可能每 100ms+ 写入一大块数据,但是使用 WatchService 我看到了 100 条 inotify 通知,这些通知基本上是一次连续的写入。)

当我将我的 WatchService 代码移植到 watchman 时,我放弃了这个“ensureSettled”黑客,因为我假设 watchman 的 20 毫秒稳定期(这比我使用的 2 秒低得多,但嘿,这是默认值)+ 与有点beta WatchService 意味着它不会是一个问题。

但是在使用 watchman-ported 代码的大约一天内,我看到了空文件读取,就像我使用 WatchService 一样。

关于我所缺少的任何想法?

我可以添加回 ensureSettled hack,但此时我很好奇发生了什么。

0 投票
1 回答
27 浏览

watchman - 使用套接字接口不断发送溢出警告

我正在通过套接字接口建立一个手表,然后订阅更改。

对于每个传入的 PDU,如果地图有一个“警告”键,我会向控制台/用户输出警告,正如文档所建议的那样。

但是,当发生溢出时,看起来我并没有得到一次“警告”键,而是每个传入的 PDU 一遍又一遍地有相同的警告(“重新抓取发生 1 次”)(AFAICT?),所以我最终使用相同的错误消息向控制台发送垃圾邮件。

对我来说,如果 Watchman 每次溢出事件只发送一次“警告”键会更好。否则,我正在考虑必须缓存“已向用户显示的警告”以避免向控制台发送垃圾邮件。

此外,就一般溢出行为而言,警告说:

但我希望有一种方法可以重置警告,而不必取消并重新订阅我的订阅。例如,现在我必须控制-c 杀死我的程序,运行watchman watch-del命令,然后重新启动我的程序。

我可以在内部实现自动化,例如让我的程序检测到“发生溢出”警告消息,终止它的订阅,watch-del发出watch.

但是,即使我可以通过套接字接口重置警告,或者这样做 internal watch-del,我想知道为什么警告需要重置 - 例如理论上如果守望者已经进行了重新抓取,我告诉用户它发生了(通过将其记录到控制台),现在不应该好吗?为什么首先需要watch-del+重新watch

例如,只要不经常发生溢出,就好像守望者在进行重新抓取(因此与文件系统重新同步)+发出一个警告 PDU 应该意味着一切都恢复正常,理想情况下,我的用户程序可以保留愚蠢/简单,只是继续在它的相同/现有订阅上获取溢出后/重新抓取后 PDU。

0 投票
1 回答
138 浏览

react-native - Facebook 守望者每次在 ubuntu 16.04 上失去连接

Facebook watchman 每次都在 ubuntu 16.04 上失去连接。它还给出错误“错误:Watcher 加载时间过长(WatchmanWatcher)”。如何在 ubuntu 上卸载 watchman?在此处输入图像描述

0 投票
3 回答
10349 浏览

facebook - 用守望者错误反应本机`npm start`

我第一次遇到这个问题:https ://github.com/facebook/react-native/issues/10088

然后我按照这个解决方案来解决这个问题:https ://github.com/facebook/react-native/issues/910#issuecomment-94181845

现在,当我进入时,npm start我得到[sane] Warning: Lost connection to watchman, reconnecting... 有什么建议么?

更新:当我将我的 MacOS 更新到 MacOS Sierra 时,这种情况开始发生。

<code>npm start</code> 之后的输出

更新:所以我尝试运行react-native run-ios它打开一个新的控制台窗口并调用npm start. 它仍然会[sane] Warning: Lost connection to watchman, reconnecting..发出警告,但它会构建捆绑包。所以守望者之间的联系被打破了。这是控制台屏幕截图: 控制台截图

0 投票
1 回答
748 浏览

react-native - Facebook React Native Hot Reload 不起作用(Ubuntu 14.04)

客观的:

我试图让热重载工作,我在代码库中进行了更改,并且更改出现在 android 模拟器中,如广告所示。

问题:

它不起作用,我感觉它与 facebook watchman 有关。每次我对代码库进行更改时,react-native 服务器都会说

顺便说一句:是的,我从 android 模拟器的开发者菜单中启用了热重载


操作系统:

守望者:

反应原生:

0 投票
2 回答
1419 浏览

ios - Watchman:Library/LaunchAgents/com.github.facebook.watchman.plist 用于写入:不是目录

我正在尝试在 Mac 上运行一个基本的 react native 项目(教程),但是在运行模拟器或部署到设备时,我得到了这个:

我试图从 git 重新安装守望者,brew install --HEAD watchman但没有帮助。

有什么建议么?

谢谢

0 投票
1 回答
1389 浏览

ios - React-native 不会在模拟器中重新加载 ios 应用程序

我有重新加载应用程序的问题,

react-native-cli:1.2.0 react-native:0.37.0 守望者:4.7.0

index.ios.js 文件。

然后运行命令 react-native run-ios。已加载应用程序模拟器,但不更新 ex 代码中的任何更改。

我已经在 stackoverflow 和 github 中查看了几个问题,但对我没有帮助

0 投票
2 回答
3056 浏览

javascript - 如何观看 react-native node_modules 的变化

当我运行react-native startnpm start打包程序启动并提示Looking for JS files in /Users/map/repos/myrepo/

我启用了热重载。当我更改位于其中的文件时,/Users/map/repos/myrepo/node_modules/react-native/似乎可以检测到更改,但是如果我在第三方存储库中编辑文件,/Users/map/repos/myrepo/node_modules/react-native-menu/就像 watchman 没有检测到更改一样。

我刚刚将我项目中的 React Native 升级到 0.39,我认为这不是之前的默认行为。我已经设置了一些登录,react-packager/src/node-haste/index.js并且似乎react-native-menu文件包含在 中hasteFSFiles,但是change没有触发事件。

我试过删除node_modules并重新安装它,清洁守望者状态和其他没有运气。

0 投票
0 回答
234 浏览

ruby - 如何创建守望者触发器来重新启动 puma/hanami 服务器

我创建了这个守望者触发器:

它应该使用 kill 命令停止 puma,然后重新启动它。如果我查看日志文件,我会发现它确实执行了某些操作,但命令从未执行过。我错过了什么?