2016-01-22 4 views
2

Я новичок в Gulp (и не очень удобен с js). Когда я используюGulp sass (libsass) очень медленно при использовании возврата

gulp.task('sass', function() { 
    gulp 
    .src('myfile.scss') 
    .pipe(sourcemaps.init()) 
    .pipe(sass(myoptions)) 
    .pipe(sourcemaps.write('./')) 
    .pipe(gulp.dest('mypath')) 
    .pipe(browserSync.stream({match: '**/*.css'})); 
}); 

компиляция производится в течение нескольких мс

Но когда я использую

gulp.task('sass', function() { 
    return gulp 
    ... 
}); 

потребовалось несколько секунд, чтобы собрать.

Может кто-нибудь объяснить мне, почему?

Спасибо.

ответ

3

Gulp использует orchestrator для выполнения задач. Ваша задача возвращает обещание или поток (в вашем случае это поток), который используется для секвенирования.

Когда вы не возвращают ничего, вызывающий абонент не может знать, что ваша задача не закончена, которая имеет по крайней мере 2 воздействия:

  • вы можете думать, что закончил (из журнала), прежде чем он на самом деле
  • следующие задачи могут начать слишком рано, и даже могут использовать старую версию скомпилированных данных CSS
+0

Ok, спасибо за ответ ... так что лучше, чтобы вернуть обещания. Теперь мне просто нужно проверить, почему так долго компилировать мои scss-файлы. –

+0

Трудно сказать, но для меня это несколько мс для дюжины файлов scss (я не использую browserSync, вы уверены, что это не то, что требует времени?). –

+0

Хорошо, узнай. «Проблема» исходит из объекта sass options **. Pipe (sass (options)) **, 'options = {outputStyle: 'compress'}' или 'options = {}'. когда я отключу эту строку, компиляция выполняется очень быстро, но когда я устанавливаю параметры (даже если объект опций пуст), компиляция берет перед собой. Есть ли причина для этого? –