IIIu6ko
@IIIu6ko

Gulp.lastRun и gulp-nunjucks, варианты?

Добрый вечер. Есть страница index.njk и в ней инклюд footer.njk. При изменении footer.njk не обновляется index.njk.
Я понял что проблема в gulp.lastRun, но без него работать с большими проектам не очень комфортно т.к. длительность таска может достигать нескольких секунд.

Обнаружил аналогичную проблема с импортами в SASS, но там для этого написали уже специальный пакет gulp-dependents. Меня интересует, если ли подобный пакет, мб кто-то использует, либо, будет даже лучше, если кто-то знает как решить вопрос без дополнительных пакетов.

ТАСК
function html() {
  return src('src/*.{html,njk}', { base: 'src', since: lastRun('html') })

    .pipe(nunjucks({
      path: 'src',
    }))

    // HTML-валидатор.
    .pipe(htmlhint('.htmlhintrc'))
    .pipe(htmlhint.reporter())

    // Манифест.
    // Если флаг --dist без --norev.
    .pipe(gulpif(dist, gulpif(!norev, revReplace({
      manifest: src('manifest/manifest.json', { allowEmpty: true }),
    }))))

    // Добавляет индентацию для заинклюженных блоков.
    .pipe(gulpif(dist, prettyHtml({
      indent_size: 2,
    })))

    // Выгрузка.
    .pipe(dest(buildHtml))

    // browserSync.
    .pipe(gulpif(!dist, browserSync.stream())); // Если нет флага --dist.
}
  • Вопрос задан
  • 71 просмотр
Решения вопроса 1
IIIu6ko
@IIIu6ko Автор вопроса
Нашёл пакет gulp-nunjucks-inheritance

Таск теперь выглядит вот так
function html() {
  return src('src/**/*.{html,njk}', { base: 'src', since: lastRun('html') })

    // Nunjucks
    .pipe(nunjucksInheritance({ base: 'src' })) // Ищем изменения в зависимостях
    .pipe(nunjucks({ path: 'src' })) // Компилируем в HTML

    // Добавляет индентацию для заинклюженных блоков.
    .pipe(prettyHtml({ indent_size: 2 }))

    // HTML-валидатор.
    .pipe(htmlhint('.htmlhintrc'))
    .pipe(htmlhint.reporter())

    // Манифест.
    // Если флаг --dist без --norev.
    .pipe(gulpif(dist, gulpif(!norev, revReplace({
      manifest: src('manifest/manifest.json', { allowEmpty: true }),
    }))))

    // Выгрузка.
    .pipe(dest(buildHtml))

    // browserSync.
    .pipe(gulpif(!dist, browserSync.stream())); // Если нет флага --dist.
}


Обязательно в src указывайте путь до всех .njk файлов, иначе пакет отказывается работать.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы