问题标签 [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.
javascript - 初始化 react-native 项目时出现“错误监视文件以进行更改:EMFILE”
我想启动一个 react-native 项目,步骤:
先react-native init testproject
然后 react-native run-ios
操作系统版本:OS X 10.12
watchman - 守望者通知后立即读取的文件为空
我正在通过 JVM 程序中的 socket/bser 接口集成 watchman。
我看到奇怪的时机:
- 构建系统写入一个文件(一个小文本文件)
- 我在 bser 界面上收到守望通知
- 线程 A 监听 bser 订阅通知将更新放到一个单独线程的队列中
- 线程 B 读取队列,读取更改的文件,然后将文件的数据放到网络上
但是,不知何故,线程 B 正在读取一个空文件。
我假设在某些时候它是有效的空,例如 IO/系统调用可能是:
- 清除文件内容
- 写入块 1
- 写入块 2
- 关闭文件
我假设我的线程 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,但此时我很好奇发生了什么。
watchman - 使用套接字接口不断发送溢出警告
我正在通过套接字接口建立一个手表,然后订阅更改。
对于每个传入的 PDU,如果地图有一个“警告”键,我会向控制台/用户输出警告,正如文档所建议的那样。
但是,当发生溢出时,看起来我并没有得到一次“警告”键,而是每个传入的 PDU 一遍又一遍地有相同的警告(“重新抓取发生 1 次”)(AFAICT?),所以我最终使用相同的错误消息向控制台发送垃圾邮件。
对我来说,如果 Watchman 每次溢出事件只发送一次“警告”键会更好。否则,我正在考虑必须缓存“已向用户显示的警告”以避免向控制台发送垃圾邮件。
此外,就一般溢出行为而言,警告说:
但我希望有一种方法可以重置警告,而不必取消并重新订阅我的订阅。例如,现在我必须控制-c 杀死我的程序,运行watchman watch-del
命令,然后重新启动我的程序。
我可以在内部实现自动化,例如让我的程序检测到“发生溢出”警告消息,终止它的订阅,watch-del
发出watch
.
但是,即使我可以通过套接字接口重置警告,或者这样做 internal watch-del
,我想知道为什么警告需要重置 - 例如理论上如果守望者已经进行了重新抓取,我告诉用户它发生了(通过将其记录到控制台),现在不应该好吗?为什么首先需要watch-del
+重新watch
?
例如,只要不经常发生溢出,就好像守望者在进行重新抓取(因此与文件系统重新同步)+发出一个警告 PDU 应该意味着一切都恢复正常,理想情况下,我的用户程序可以保留愚蠢/简单,只是继续在它的相同/现有订阅上获取溢出后/重新抓取后 PDU。
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 时,这种情况开始发生。
更新:所以我尝试运行react-native run-ios
它打开一个新的控制台窗口并调用npm start
. 它仍然会[sane] Warning: Lost connection to watchman, reconnecting..
发出警告,但它会构建捆绑包。所以守望者之间的联系被打破了。这是控制台屏幕截图:
react-native - Facebook React Native Hot Reload 不起作用(Ubuntu 14.04)
客观的:
我试图让热重载工作,我在代码库中进行了更改,并且更改出现在 android 模拟器中,如广告所示。
问题:
它不起作用,我感觉它与 facebook watchman 有关。每次我对代码库进行更改时,react-native 服务器都会说
顺便说一句:是的,我从 android 模拟器的开发者菜单中启用了热重载
操作系统:
守望者:
反应原生:
ios - Watchman:Library/LaunchAgents/com.github.facebook.watchman.plist 用于写入:不是目录
我正在尝试在 Mac 上运行一个基本的 react native 项目(教程),但是在运行模拟器或部署到设备时,我得到了这个:
我试图从 git 重新安装守望者,brew install --HEAD watchman
但没有帮助。
有什么建议么?
谢谢
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 中查看了几个问题,但对我没有帮助
javascript - 如何观看 react-native node_modules 的变化
当我运行react-native start
或npm 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
并重新安装它,清洁守望者状态和其他没有运气。
ruby - 如何创建守望者触发器来重新启动 puma/hanami 服务器
我创建了这个守望者触发器:
它应该使用 kill 命令停止 puma,然后重新启动它。如果我查看日志文件,我会发现它确实执行了某些操作,但命令从未执行过。我错过了什么?