gulp 이벤트에서 console.log를 stdout으로


87

gulp 작업이 실행 중이거나 실행 중일 때 stdout (구성 환경)에 기록하고 싶습니다 .

이 같은:

gulp.task('scripts', function () {
  var enviroment = argv.env || 'development';
  var config = gulp.src('config/' + enviroment + '.json')
      .pipe(ngConstant({name: 'app.config'}));
  var scripts = gulp.src('js/*');

  return es.merge(config, scripts)
    .pipe(concat('app.js'))
    .pipe(gulp.dest('app/dist'))
    .on('success', function() { 
      console.log('Configured environment: ' + environment);
    });
});

어떤 이벤트에 응답해야하는지 또는 이들 목록을 어디서 찾을 수 있는지 잘 모르겠습니다. 포인터가 있습니까? 감사합니다.

답변:


170

(2017 년 12 월 gulp-util로깅을 제공 하는 모듈 은 더 이상 사용되지 않습니다 . Gulp 팀은 개발자가이 기능을 fancy-log모듈로 교체 할 것을 권장했습니다 .이 답변은이를 반영하여 업데이트되었습니다.)

fancy-log 로깅을 제공하며 원래 Gulp 팀에 의해 구축되었습니다.

var log = require('fancy-log');
log('Hello world!');

로깅을 추가하기 위해 Gulp의 API 문서.src 는 다음 을 반환 한다고 알려 줍니다.

플러그인으로 파이프 할 수있는 Vinyl 파일 스트림을 반환합니다.

Node.js의 Stream문서는 이벤트 목록을 제공합니다. 종합하면 다음과 같은 예가 있습니다.

gulp.task('default', function() {
    return gulp.src('main.scss')
        .pipe(sass({ style: 'expanded' }))
        .on('end', function(){ log('Almost there...'); })
        .pipe(minifycss())
        .pipe(gulp.dest('.'))
        .on('end', function(){ log('Done!'); });
});

참고 : end이벤트는 "모든 데이터가 기본 시스템으로 플러시 될 때"호출되기 때문에 플러그인이 완료되기 전에 (그리고 자체 출력을 모두 보냄) 호출 될 수 있습니다.


2
.on('end', () => gutil.log('ES6 arrow syntax for simplicity...') )
Frank Nocke

12
도구가 왜 필요한지 아십니까? 왜 작동하지 console.log않습니까?
Alex McMillan

4
@AlexMcMillan .on('end', function(){ console.log('Almost there...'); })이 나를 위해 일합니다.
Davey

3
@AlexMcMillan 나머지 로그와 동일한 스타일로 출력을 예쁘게 인쇄하여 타이머를 얻습니다.
msanford

3
오늘 (2017 년 12 월) 부터는gulp-util 더 이상 사용되지 않습니다. medium.com/gulpjs/gulp-util-ca3b1f9f9ac5
m90

15

(참고-2017 년 12 월 gulp-util모듈은 더 이상 사용되지 않습니다.)

Jacob Budin 의 답변을 기반으로 최근에 이것을 시도했고 유용하다는 것을 알았습니다.

var gulp = require("gulp");
var util = require("gulp-util");
var changed = require("gulp-changed");

gulp.task("copyIfChanged", function() {
    var nSrc=0, nDes=0, dest="build/js";
    gulp.src("app/**/*.js")
    .on("data", function() { nSrc+=1;})
    .pipe(changed(dest)) //filter out src files not newer than dest
    .pipe(gulp.dest(dest))
    .on("data", function() { nDes+=1;})
    .on("finish", function() {
        util.log("Results for app/**/*.js");
        util.log("# src files: ", nSrc);
        util.log("# dest files:", nDes);
    });
}

.on("end").on("finish")어떤 차이?
Frank Nocke

3
내가 아는 한, 그렇지 않을 writable.on('finish')때 발사됩니다 readable.on('end'). 이 경우 정확한 이벤트는 중요하지 않을 수 있습니다. 유용한 통계를 기록하는 데 더 중점을 두었습니다.
Trevedhek

현재 (7.5.0) 문서에 따르면 " 'finish''end'이벤트는 각각 stream.Writablestream.Readable클래스에서 제공됩니다." @FrankNocke
msanford

gulp-util더 이상 사용되지 않습니다. fancy-log대신 사용
slajma

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.