gulp-useref не работает с gulp-merge

Ситуация: у меня есть следующий скрипт Gulp, который должен собрать все мои html-файлы в distFolder. Кроме того, он должен создавать внешние файлы сценариев, анализируя ссылки в index.html - это то, для чего полезен useref. Я не уверен, что это идеальный способ - но мне нужно разделить HTML-файлы - если я помещаю в несколько HTML-файлов, я получаю конфликты записи с cleanCSS() и uglify().

// Parse the html file and create external scripts
gulp.task('htmlscripts', function() {
    var s1 = gulp.src(['*.html', '!index.html'])
        .pipe(useref({noAssets: true}))
        .pipe(gulp.dest(distFolder));
    var s2 = gulp.src('index.html')
        .pipe(useref())
        .pipe(cache('useref'))
        .pipe(gulpif('*.js', uglify()))
        .pipe(gulpif('*.css', cleanCSS()))
        .pipe(gulp.dest(distFolder));
    return merge(s1, s2);
});

// Minify 
gulp.task('htmlmin', ['htmlscripts'], function() {
    return ...
});

gulp.task('default', ['htmlscripts', 'htmlmin']);

Проблема: 2-я задача (htmlmin) никогда не загружается. Похоже, что 1-е задание (htmlscripts) не возвращает правильное завершение в обещании. (Проблема зависимости)

Если я удалю одну из двух задач, другая завершится правильно.

Я сделал следующие тесты:

Не работает (задача htmlmin не запущена):

gulp.task('htmlscripts', function() {
    var s1 = gulp....
    var s2 = gulp....
    return merge(s1,s2);
});

Работает (я имею в виду, по крайней мере, скрипт htmlmin запущен):

gulp.task('htmlscripts', function() {
    var s1 = gulp....
    var s2 = gulp....
    return merge(s1);
});

Не работает (задача htmlmin не запущена):

gulp.task('htmlscripts', function() {
    var s1 = gulp....
    var s2 = gulp....
    return merge(s2); // this one is really strange, isn't it? (see next test)
});

Работает (я имею в виду, по крайней мере, скрипт htmlmin запущен):

gulp.task('htmlscripts', function() {
    // var s1 = gulp....
    var s2 = gulp....
    return merge(s2);
});

1 ответ

Решение

Ты используешь gulp-cached?

Может ли быть так, что ваш ресурс в s2 находится в кеше? Следовательно .pipe(cache('useref')) не будет передавать файл вперед и s2 будет null?

С gulp-cached Если ресурс найден в кеше, он не передаст кешированный ресурс. Он ничего не проходит, то есть останавливается. Следовательно s2 будет пустым.

Я бы попробовал удалить .pipe(cache('useref')) и посмотреть, работает ли это?

Другие вопросы по тегам