【问题标题】:Use Chokidar for watching over files with specific extentions使用 Chokidar 监视具有特定扩展名的文件
【发布时间】:2023-03-15 20:52:01
【问题描述】:

我需要在我的应用中添加对此功能的支持。 我目前的实现非常简单:

            this.watcher.on("add", (pathName: string) => {
                this.sendNotifyAction(new NotifyAction(PathEvent.Add, pathName));
            }).on("change", (pathName: string) => {
                this.sendNotifyAction(new NotifyAction(PathEvent.Change, pathName));
            }).on("unlink", (pathName: string) => {
                this.sendNotifyAction(new NotifyAction(PathEvent.Delete, pathName));
            }).on("ready", () => {
                this.sendReadinessNotification();
            });

现在我想要类似的东西:

private acceptedFileExtensions: string[] = ['.txt', '.docx', '.xlx', ...]

并在 Chokidar 中使用这个扩展数组。因此,如果监视目录中的文件具有列表中的扩展名 - 发送通知,如果没有 - 什么也不做。

我看到了类似的问题https://stackoverflow.com/questions/40468608/use-chokidar-to-watch-for-specific-file-extension#=,但这不是我真正需要的。

在回调函数内部过滤对我来说看起来不太好,但我没有看到其他变体。请指教。

谢谢。

【问题讨论】:

  • 为什么不像acceptedFileExtensions.forEach(ext => chokidar.add("**/*" + ext)这样的?
  • 或者将基于这些扩展的通配符数组传递给chokidar.watch()
  • 如何通过?

标签: javascript node.js fs


【解决方案1】:

谢谢@robertklep,chokidar 使用数组。 所以我的代码看起来像:

private buildWildcardList(path:string): string[] {
        let result: string[] = [];
        _.each(this.acceptedFileExtensions, (extension: string) => {
           result.push(path + '/**/*' + extension);
        });

       return result;
    }

let wildcardList: string[] = this.buildWildcardList(path);
this.watcher = chokidar.watch(wildcardList, watchOptions);

【讨论】:

  • 如果我们观察 30 种不同的扩展,这会是个问题吗?或者您会推荐其他解决方案吗?
  • 我认为这应该不是问题。我的解决方案适用于 12 个扩展。
猜你喜欢
  • 2020-04-05
  • 2023-03-19
  • 2020-06-06
  • 2011-02-14
  • 1970-01-01
  • 1970-01-01
  • 2017-03-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多