2016-10-18 2 views
6

나는 4 꿀꺽 3에서 업그레이드하고있어, 나는 오류로 실행 해요 : gulp-concat과 lazypipe의 조합이 gulp 4를 사용하여 오류를 일으키는 것은 무엇입니까?

The following tasks did not complete: build 
Did you forget to signal async completion? 

내가이 무슨 말을 이해하지만,이 코드를 유발하는 이유를 이해할 수 없다.

오류가 발생하면 작업이 완료되고 파일이 연결되어 dest에 기록됩니다. lazypipe없이 동일한 코드를 실행하면 오류가 발생하지 않으며 lazypipe 내에서 연결을 제거하면 오류가 수정됩니다.

스트림을 만드는 무언가 (예 : 병합 스트림)에 전체를 배치하면 문제가 해결됩니다. gulp-concat과 lazypipe 사이의 상호 작용에 관한 내용이 스트림이 올바르게 반환되지 못하게하는 것 같습니다.

gulp.task('build', function() { 
    var dest = 'build'; 

    var buildFiles = lazypipe() 
     .pipe(plugins.concat, 'cat.js') // Task will complete if I remove this 
     .pipe(gulp.dest, dest); 

    // This works 
    // return gulp.src(src('js/**/*.js')) 
    //  .pipe(plugins.concat('cat.js')) 
    //  .pipe(gulp.dest(dest)); 

    // This doesn't (unless you wrap it in a stream-making function) 
    return gulp.src(src('js/**/*.js')) 
     .pipe(buildFiles()); 
}); 

가 어떤 조언 감사 :

은 여기 (간체) 작업입니다!

답변

7

덤프 4와 함께 lazypipe을 사용할 때 이것은 known issue이며 가까운 장래에 수정되지 않을 예정입니다. 지금까지 내가이 문제가 4가 스트림 지원에 대해 뭐라고이있다 async-done를 사용 꿀꺽 사실로 인해 발생 말할 수

OverZealous commented on 20 Dec 2015
As of now, I have no intention of making lazypipe work on Gulp 4.

:

Note: Only actual streams are supported, not faux-streams; Therefore, modules like event-stream are not supported.

당신이 사용하는 문제에서 견적 lazypipe() 마지막 파이프로 얻을 수있는 것은 꿀꺽 꿀꺽 마시는 스트림으로 작업 할 때 일반적으로 가지고있는 많은 특성이없는 스트림입니다. 당신은 스트림을 로그인하여 자신이를 볼 수 있습니다

// console output shows lots of properties 
console.log(gulp.src(src('js/**/*.js')) 
    .pipe(plugins.concat('cat.js')) 
    .pipe(gulp.dest(dest))); 

// console output shows much fewer properties 
console.log(gulp.src(src('js/**/*.js')) 
    .pipe(buildFiles())); 

이 아마 쭉 마시는 두 번째 스트림은 "가짜 스트림"으로 간주하고 스트림이 완료되면 제대로 감지하지 못하는 이유입니다.

이 시점에서 유일한 대안은 몇 가지 해결 방법입니다. 심지어이 문제를 해결해야 어떤 .pipe()buildFiles() 후 추가 또는

gulp.task('build', function(cb) { 
    var dest = 'build'; 

    var buildFiles = lazypipe() 
    .pipe(plugins.concat, 'cat.js') 
    .pipe(gulp.dest, dest); 

    gulp.src(src('js/**/*.js')) 
    .pipe(buildFiles()) 
    .on('end', cb); 
}); 

: 가장 쉬운 해결 방법은 (추가 패키지를 필요로하지 않는) 단지 'end' 이벤트에 대한 당신의 작업에 콜백 함수 cb를 추가하고 경청하는 것입니다 실제로 gutil.noop()처럼 아무것도하지 않는 하나를 명확하고 자세한 설명

var gutil = require('gulp-util'); 

gulp.task('build', function() { 
    var dest = 'build'; 

    var buildFiles = lazypipe() 
    .pipe(plugins.concat, 'cat.js') 
    .pipe(gulp.dest, dest); 

    return gulp.src(src('js/**/*.js')) 
    .pipe(buildFiles()) 
    .pipe(gutil.noop()); 
}); 
+0

감사합니다, 정말 감사! – goodforenergy