1

我使用 Watchman 4.4.0 版本,发现 watchman 只能从根目录监视 2 级目录的问题。

所以我不确定这出了什么问题?

目录结构

src/<- set watch roots └── Oncmd └── Command <- **File under this can't monitor ├── GencmdCommand.php ├── InitCommand.php └── cmdCommand.php

守望者——观察名单

{
"version": "4.4.0",
"roots": [
    "/home/udomsak/mycmd/src"
]

}

守望者——触发器列表

{
"version": "4.4.0",
"triggers": [
    {
        "name": "build_phar",
        "append_files": true,
        "command": [
            "./build.sh"
        ],
        "stdin": [
            "name",
            "exists",
            "new",
            "size",
            "mode"
        ],
        "expression": [
            "anyof",
            [
                "match",
                "*",
                "wholename"
            ]
        ]
    }
]

}

4

1 回答 1

2

如果您运行watchman find /home/udomsak/mycmd/src并且在输出中看不到这些文件,那么这是一个守望者错误。

但是,我想我可以看到是什么导致它无法按您的预期工作。

match您使用的表达式与您期望的方式/中出现的字符不匹配。wholename

您没有包含有关如何建立该触发器的详细信息,因此有关如何获得听起来像您正在寻找的行为的建议有几个不同的选择。

选项 1,因为看起来您想要触发任何文件更改,所以只是完全删除表达式术语。

选项 2,通过扩展通配符语法使用递归 glob:["match", "**/*", "wholename"].

选项 3,使用watchman-make。与使用trigger命令相比,它通常更容易watchman-make用于这种用例:

$ watchman-make --make build_phar -t build -p '**/*'
# Relative to /home/udomsak/mycmd/src
# Changes to files matching **/* will execute `build_phar build`
# waiting for changes
于 2016-02-17T15:54:39.667 回答