phpactor / amp-fswatch
Amphp 的异步文件系统监视器
0.3.0
2023-08-12 15:51 UTC
Requires
- php: ^8.0
- amphp/amp: ^2.4
- amphp/process: ^1.1
- psr/log: ^1.1
- symfony/filesystem: ^5.0|^6.0
- webmozart/glob: ^4.4
Requires (Dev)
- amphp/phpunit-util: ^1.3
- ergebnis/composer-normalize: ^2.0
- friendsofphp/php-cs-fixer: ^3.15
- jangregor/phpstan-prophecy: ^1.0
- phpactor/test-utils: ~1.1.3
- phpspec/prophecy-phpunit: ^2.0
- phpstan/phpstan: ^1.1
- phpunit/phpunit: ^9.0
- symfony/var-dumper: ^5.0|^6.3
This package is auto-updated.
Last update: 2024-08-28 13:54:08 UTC
README
这是一个用于异步监视您文件系统路径变化的 Amp 库,可以使用各种策略。
它被创建用于触发 Phpactor 中的代码索引。
- 基于 Promise 的 API。
- 能够自动选择适合当前环境的支持监视器。
- 除了轮询监视器外,还提供实时(例如
inotify
)监视器。 - 提供以下装饰器
- 包括/排除模式。
- 缓冲通知。
- 所有监视器的统一配置。
用法
请参阅 bin/watch
的实现,如下所示
Loop::run(function () use () { $logger = // create a PSR logger $config = new WatcherConfig([$path]); $watcher = new PatternMatchingWatcher( new FallbackWatcher([ new BufferedWatcher(new InotifyWatcher($config, $logger), 10), new FindWatcher($config, $logger), new PhpPollWatcher($config, $logger), new FsWatchWatcher($config, $logger) ], $logger), [ '/**/*.php' ], [] ); $process = yield $watcher->watch([$path]); while (null !== $file = yield $process->wait()) { fwrite(STDOUT, sprintf('[%s] %s (%s)'."\n", date('Y-m-d H:i:s.u'), $file->path(), $file->type())); } });
Watchman
Watchman 需要安装,并在 Linux、Mac 和 Windows 上运行。
use Phpactor\AmpFsWatch\Watcher\Watchman\WatchmanWatcher; $watcher = new WatchmanWatcher($config, $logger);
Inotify
使用 Linux 的 inotifywait
二进制文件来监视更改。
use Phpactor\AmpFsWatch\Watcher\Inotify\InotifyWatcher; $watcher = new InotifyWatcher($config, $logger); // ...
Fswatch
不稳定:此监视器尚未经过广泛的测试。
FsWatch 是一个跨平台(Linux、Mac、Windows)文件监视实用工具,在可能的情况下会自动使用平台的原生功能。
use Phpactor\AmpFsWatch\Watcher\FsWatch\FsWatchWatcher; $watcher = new FsWatchWatcher($config, $logger); // ...
查找
使用 find
二进制文件(Linux 和 Mac)轮询文件更改。
每秒轮询更改
use Phpactor\AmpFsWatch\Watcher\Find\FindWatcher; $watcher = new FindWatcher($config, $logger); // ...
请注意,虽然这应该在 GNU 和 BSD 的 find
变体上工作,但由于使用 -newerxy
开关调用,它可能在其他变体上不工作,因为该开关不在 POSIX 标准中。
PHP 轮询
这是最慢且资源消耗最大的选项,但应该适用于所有环境。
use Phpactor\AmpFsWatch\Watcher\Find\FindWatcher; $watcher = new PhpPollWatcher($config, $logger); // ...
回退
回退监视器将自动选择当前系统上的第一个支持的监视器。
use Phpactor\AmpFsWatch\Watcher\Fallback\FallbackWatcher; $watcher = new FallbackWatcher( [ new InotifyWatcher($logger), new FindWatcher(500, $logger) ] $logger ); // ...
贡献
此软件包是开源的,欢迎贡献!请随意在此存储库中提交拉取请求。
支持
- 在主 Phpactor 存储库上创建问题。
- 加入 Slack 上的
#phpactor
频道,地址为 Symfony Devs。