我遇到的原始问题是该任务在src.pages
内存在的文件数量运行了x次,我通过添加“就地更改”修复了此问题。插件,比较源文件的最后修改日期。这意味着如果修改后的日期没有改变,那么它就不会运行,或者如果它已经改变那么它就会运行,但只会运行一段时间。
因为插件只根据传递给流的目录检查文件,这意味着它不会检查src.templates
内的文件,这基本上是我的.html部分文件文件夹。我运行的解决方法是让一个单独的任务监视部分文件更改,但不运行任何比较功能,这意味着我仍然有多次运行任务的原始问题。
已更新:以下是我的gulpfile的精简版,其中包含与我的问题相关的所有内容:
var fileFormat = 'html',
fileExt = '.' + fileFormat;
var src = {
pages: 'src/pages/**/*' + fileExt,
templates: 'src/templates/**/*' + fileExt,
};
var dist = {
pages: './',
css: './',
};
var config = {
templates: ['src/templates/', 'src/partials/'],
pagesWatch: './*' + fileExt, // Directory where pages are output
};
// Browser Sync with code/HTML injection
function bs() {
browserSync.use(htmlInjector, {
files: dist.pages + '*' + fileExt
});
browserSync.init({
server: dist.pages,
files: dist.css + '*.css',
watchOptions: {
awaitWriteFinish: {
stabilityThreshold: 500
}
}
});
}
function nunjucksPages() {
nunjucksRender.nunjucks.configure([src.templates]);
return gulp.src([src.pages])
.pipe(changedInPlace())
.pipe(nunjucksRender({
path: config.templates,
ext: fileExt
}))
.pipe(gulp.dest(dist.pages))
}
// Use CommonJS 'exports' module notation to declare tasks
exports.nunjucksPages = nunjucksPages;
exports.bs = bs;
function watch() {
gulp.watch([src.pages, src.templates], gulp.series(nunjucksPages));
gulp.watch(config.pagesWatch, gulp.series(htmlInjector));
}
// Runs all the required tasks, launches browser sync, and watches for changes
var build = gulp.series(clean, gulp.parallel(nunjucksPages));
var run = gulp.parallel(bs, watch);
gulp.task('default', gulp.series(build, run));
编辑以供澄清:我有一项任务正在查看页面和模板目录以进行更改,一旦完成,它就会运行nunjucksPages
功能。在nunjucks编译HTML之后,浏览器同步将检测到这一点并注入HTML(我的代码中的第二个监视任务)。
我现有的解决方法是复制两个nunjucks函数,并独立运行它们 - 页面功能与缓存(单个重载,问题修复!),模板功能没有缓存(每X重新加载)页面)。
相关问题和评论:https://github.com/carlosl/gulp-nunjucks-render/issues/47#issuecomment-240962074