我正在尝试使用Chokidar忽略文件夹中的特定文件。我确定忽略路径的语法不正确,但我似乎无法找到问题。我已经尝试过字符串,全局和数组的所有组合。如果有人能指出我正确的方向,我会很感激。
以下是此问题的快速示例。我正在尝试忽略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);
感谢您的帮助!
答案 0 :(得分:0)
我倾向于同意@ 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/ignore.js,而不是像/tmp/tmp2/ignore.js这样的嵌套实例。如果要忽略所有嵌套实例,可以通过将双星号通配符添加到忽略路径来轻松解决此问题:
var watcher = chokidar.watch(Meteor.call('getWatchFolder'), {
ignored: path.resolve(Meteor.call('getWatchFolder')+'/**/ignore.js'),
persistent: true
});
我尝试将我的监视文件夹设置为。喜欢你。它找到了TONS的文件,我确定它是从
运行的/Users/esoyke/myAppName/.meteor/local/build/programs/server
但这并不尊重我的忽视路径。当我改变观看时。相反,它自然地找到相同的文件,但忽略再次工作。我怀疑这里有绝对路径和相对路径存在问题,看看你是否可以重构使用绝对路径。
P.S。感谢您向我展示了path.resolve,我还没有使用过该Node模块。我试图添加多个子目录到忽略,并试图通过编辑chokidar的默认正则表达式/[/\]./来这样做。这种方法更简单易读。遗憾的是,似乎chokidar的库目前不允许多个忽略值,并且当有多个arg时,path.resolve返回一个数组,所以我可能不得不回到正则表达式来获取多个忽略路径工作