gulp.watch排除assets目录但保留content子目录失效,求解决方案
解决Gulp Watch排除目录但保留子目录的问题
嘿,我知道你现在卡在Gulp监听规则的优先级问题上了——别担心,这是个很常见的坑,我来帮你捋清楚!
首先,你的初始写法没生效的核心原因:当你先用!assets/**/*排除整个assets目录后,后面的assets/content/**/*根本没法“拉回”已经被排除的文件。因为Gulp使用的glob规则里,排除模式(!开头)的优先级是高于后续包含模式的,一旦文件被排除,再写包含规则也没用了。
那该怎么调整呢?给你两个靠谱的解决方案:
方案一:精准排除非目标子目录
这种写法能保留根目录所有文件,同时只排除assets下除了content之外的内容,灵活性更高:
gulp.watch([ // 匹配项目中所有文件 '**/*', // 排除assets下所有不是content的子目录里的文件 '!assets/!(content)/**/*' ]);
这里的!(content)是glob的扩展语法,意思是“匹配任何不是content的目录/文件”,这样就精准避开了assets/content,只排除你真正不想监听的部分(比如assets/stylesheets这类目录)。
方案二:直接指定需要监听的文件
如果你的监听范围比较明确(根目录的index.html+assets/content下所有文件),直接写包含规则反而更清晰,完全不用纠结排除逻辑:
gulp.watch([ // 监听根目录的index.html 'index.html', // 监听assets/content下所有层级的文件 'assets/content/**/*' ]);
两种方案都能实现你要的效果:监听index.html和assets/content/index.html,忽略assets/stylesheets/default.css。你可以根据自己的项目复杂度选合适的写法~
内容的提问来源于stack exchange,提问作者bashaus
相关产品推荐
相关产品推荐

