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'))
и посмотреть, работает ли это?