phpactor/amp-fswatch

Amphp 的异步文件系统监视器

0.3.0 2023-08-12 15:51 UTC

This package is auto-updated.

Last update: 2024-08-28 13:54:08 UTC


README

CI

这是一个用于异步监视您文件系统路径变化的 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