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

时间:2019-07-07 19:35:03

标签: node.js regex glob 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'

任何人都不知道如何使其工作吗?

3 个答案:

答案 0 :(得分:0)

chokidar documentation指定ignored参数为anymatch-compatiable,因此可以通过多种方式完成此操作。

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

任何index.js文件,即使在根文件夹中也是如此:

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

子文件夹中只有index.js个文件:

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

还要注意在您的示例中,您使用signoreInitial是不是一个选择,也许您是说ignoreInitial


或者使用回调:

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

答案 1 :(得分:0)

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

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

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

答案 2 :(得分:0)

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

ignored: ['**/node_modules'],

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

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