如何使用chokidar忽略子目录中的文件

how to ignore files within subdirectories using chokidar

我有这个目录结构

├── components
│   ├── quarks
│   │   └── index.js
│   │   └── ...
│   ├── bosons
│   │   └── index.js
│   │   └── GridLayout.vue
│   │   └── ...
│   ├── atoms
│   │   └── ButtonStyle.vue
│   │   └── InputStyle.vue
│   │   └── index.js
│   │   └── ...
│   ├── .......
└─────

我想忽略每个文件夹中的 index.js,但我不明白,我已经尝试了多种方法

const path = require('path')
const chokidar = require('chokidar')
const ROOT_PATH = path.resolve('components')

const watcher = chokidar.watch(ROOT_PATH, {
  ignored: ROOT_PATH + '/*/index.js', //does not work
  ignoreInitial: true
})

已经尝试过: './components/**/index.js', './components/*/index.js', 'components/*/index.js', 'components/**/index.js', 'ROOT_PATH + '/**/index.js'

有人知道如何让它发挥作用吗?

chokidar documentation specifies that the ignored parameter is anymatch-compatiable所以这可以通过多种方式完成。

这是一个正则表达式解决方案...

任何 index.js 文件,即使在根文件夹中:

{
    ignored: /(^|[\/\])index\.js$/,
    // ...
}

sub-folder 中只有 index.js 个文件:

{
    ignored: /[\/\]index\.js$/,
    // ...
}

另请注意,在您的示例中您使用了 signoreInitial 这不是一个选项,也许您的意思是 ignoreInitial?


或者回调:

{
    ignored: (path) => { return path.endsWith('\index.js') || path.endsWith('/index.js'); },
    // ...
}

Chokidar 似乎有问题,无法在 MacOS 上忽略文件,这就是我的印象。

因此,在 运行 我的操作之前,我正在检查该文件是否与我要忽略的文件相同。

chokidar
  .watch('components', { ignoreInitial: true })
  .on('all', (event, filename) => {
    filename !== 'index.js'
    // action here
  })

在 Mac 上对我有用的是使用 **:

ignored: ['**/node_modules'],

因此,如果其他选项由于错误而不起作用,请选择这个:

 ignored: ['**/index.js'],