4

私が抱えていた最初の問題は、タスクが内部に存在するファイルの数に対して x 回実行されていたことでしsrc.pagesた。ソース ファイルの最終更新日を比較するために、「changed-in-place」プラグインを追加することでこれを修正しました。つまり、変更日が変更されていない場合は実行されず、変更されている場合は実行されますが、必要な回数だけ実行されます。

プラグインは、ストリームに渡されたディレクトリに対してのみファイルをチェックするため、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関数が実行されます。HTML が nunjucks によってコンパイルされた後、ブラウザー同期はこれを検出し、HTML を挿入します (私のコードの 2 番目の監視タスク)。

私が実施している現在の回避策は、両方の nunjucks 関数を複製し、それらを個別に実行することです。ページはキャッシュ付き (単一のリロード、問題が修正されました!) で機能し、テンプレートはキャッシュなしで機能します (X 量のページごとにリロード)。 .

関連する問題とコメント: https://github.com/carlosl/gulp-nunjucks-render/issues/47#issuecomment-240962074

4

0 に答える 0