Задача Gulp с итератором запускает только первую итерацию, а затем переходит к следующей задаче - PullRequest
0 голосов
/ 03 февраля 2020

Моя задача «стили» запускает только «редактор» первой итерации и не запускает последующие итерации. Я думаю, что это связано с недавним обновлением Gulp 4.x, если это так, каков новый синтаксис для этой задачи?

Эта задача используется для компиляции ['editor.s css', 'login. s css ',' main.s css ',' typography.s css '] в [' editor. css ',' login. css ',' main. css ', 'типография. css']

gulp.task('styles', function(){

    for( var i=0, files=[ 'editor', 'login' , 'main' , 'typography' ]; i < files.length; i++ ){

        //Compile Main Styles
        return gulp.src('scss/' + files[i] + '.scss')
            .pipe(plumber())
            .pipe(glob())
            .pipe(sass({ outputStyle: 'compressed' }).on('error' , sass.logError ) )
            .pipe(postcss([ autoprefixer ]))
            .pipe(gulp.dest('css/'))
            .pipe(browserSync.stream());
    }
});

Ответы [ 2 ]

1 голос
/ 04 февраля 2020

@ johannchopin абсолютно правильно (и я проголосовал). Но если вы предпочитаете придерживаться стиля, который у вас есть, вы можете использовать:

gulp.task('styles', function () {

  let stream;

  for( var i=0, files=[ 'editor', 'login' , 'main' , 'typography' ]; i < files.length; i++ ){

      //Compile Main Styles
      stream = gulp.src('scss/' + files[i] + '.scss')
        .pipe(plumber())
        .pipe(glob())
        .pipe(sass({ outputStyle: 'compressed' }).on('error' , sass.logError ) )
        .pipe(postcss([ autoprefixer ]))
        .pipe(gulp.dest('css/'))
        .pipe(browserSync.stream());
  }

  return stream;
});
1 голос
/ 03 февраля 2020

Проблема здесь исходит из вашего return заявления, которое завершит работу для l oop. Gulp поддержки непосредственно массив:

gulp.task('styles', function(){
  return gulp.src(['/scss/editor.scss', '/scss/login.scss', ...], { base: '.' })
    .pipe(sass())
    .pipe(gulp.dest('.'));
});
...