我正在尝试使用Chokidar忽略文件夹中的特定文件。我确信忽略路径的语法是不正确的,但我似乎找不到问题所在。我已经尝试了字符串、globs和数组的所有组合。如果有人能给我指出正确的方向,我将不胜感激。
下面是这个问题的一个快速示例。我试图忽略ignore.js,但由于文件夹正在被监视,所以在写入和删除文件时都会执行console.log。
var chokidar = require('chokidar');
var fs = require('fs');
var path = require('path');
var watcher = chokidar.watch('./test', {
ignored: path.resolve('./test/ignore.js'),
persistent: true,
ignoreInitial: true,
alwaysState: true
});
watcher.on('all',console.log);
setTimeout(function(){fs.writeFile('./test/ignore.js', 'w');}, 200);
setTimeout(function(){fs.unlink('./test/ignore.js');}, 300);谢谢你的帮助!
发布于 2015-07-14 03:31:50
我倾向于同意@loganfsmyth的评论,即你的路径名是错误的。在我的应用程序中,我通过一个函数动态查找chokidar正在监控的文件夹。例如
Meteor.methods({
getWatchFolder: function () {
return watchFolder;
},
});我在其他地方设置了watchFolder,这在这个问题的上下文中并不重要,但假设它返回"/tmp“。这很好用,并且忽略了那个文件:
var watcher = chokidar.watch(Meteor.call('getWatchFolder'), {
ignored: path.resolve(Meteor.call('getWatchFolder')+'/ignore.js'),
persistent: true
});我注意到这只忽略了/tmp/Ignre.js,而不是像/tmp/tmp2/Ignre.js这样的嵌套实例。如果要忽略所有嵌套的实例,可以通过在忽略路径中添加双星号通配符来轻松解决此问题:
var watcher = chokidar.watch(Meteor.call('getWatchFolder'), {
ignored: path.resolve(Meteor.call('getWatchFolder')+'/**/ignore.js'),
persistent: true
});我尝试将我的手表文件夹设置为。像你一样。它找到了大量的文件,我确定它是从
/Users/esoyke/myAppName/.meteor/local/build/programs/server不过,这并不尊重我的忽略路径。当我把它从观看改过来的时候。到那个绝对路径,它自然会找到相同的文件,但忽略再次起作用。我怀疑这里存在绝对路径和相对路径的问题,看看您是否可以重构以使用绝对路径。
另外,谢谢你向我展示了path.resolve,我还没有用过那个Node模块。我试图向ignore添加多个子目录,并试图通过编辑chokidar的默认regex /[/]./来完成此操作。这种方法更简单,更容易阅读。可悲的是,chokidar的库目前似乎不允许多个忽略值,当有多个参数时,path.resolve会返回一个数组,所以我可能不得不回到正则表达式来让多个忽略路径工作。
https://stackoverflow.com/questions/28523074
复制相似问题