2016-06-02 3 views
2

gulp 및 jsc를 사용하여 코드 냄새를 방지하려고합니다. 나는 또한 변화가 일어날 때 일어나는 시계를 사용하고 싶다. jscs가 실행중인 문제는 감시중인 소스 파일을 수정하는 것입니다. 이GULP : 무한 루프를 일으키지 않고 감시 된 파일 수정

const gulp = require('gulp'); 

gulp.task('lint', function() { 
    return gulp.src('/src/**/*.js') 
     .pipe(jscs({ 
      fix: true 
     })) 
     .pipe(jscs.reporter()) 
     .pipe(gulp.dest('/src')); 
}); 

gulp.task('watch', function() { 
    gulp.watch('/src/**/*.js', ['lint']); 
}); 

답변

4

그것은에서 소스 파일을 오버라이드 (override)하는 나쁜 생각이 일반적입니다 ... 꿀꺽 꿀꺽 파일을 수정 jscs의 무한 루프로 이동 한 후 변경 사항을보고하고 다시하고 다시하고 다시 jscs을 발사보고 원인 꿀꺽 꿀꺽 마시는 일. 해당 파일이 열려있는 모든 편집자/IDE는 정상적으로 처리 할 수도 있고하지 않을 수도 있습니다. 일반적으로 파일을 별도의 dist 폴더에 쓰는 것이 좋습니다.

여기 말했다 두 가지 가능한 솔루션이다되고 그건 : 당신은 그래서 당신이하고있는 무한 루프를 방지, 두 번째를 실행하고 파일을 다시 작성에서 gulp-jscs 플러그인을 중지해야

해결 방법 1

실행 중.

var cache = require('gulp-cached'); 

gulp.task('lint', function() { 
    return gulp.src('/src/**/*.js') 
    .pipe(cache('lint')) 
    .pipe(jscs({ 
     fix: true 
    })) 
    .pipe(cache('lint')) 
    .pipe(jscs.reporter()) 
    .pipe(gulp.dest('/src')); 
}); 

첫 번째 cache()lint의 마지막 호출 이후 변경된 디스크에있는 파일 만이 통과되어 있는지 확인합니다 : 당신이해야 할이 모두를 달성하기 위해 당신의 lint 작업에 gulp-cached를 추가합니다. 두 번째 파일 cache()은 실제로 jscs()으로 수정 된 파일 만 디스크에 쓰게합니다.

이 솔루션의 단점은 lint 작업이 아직 두 번 실행되고 있다는 것입니다. 두 번째 실행 중에 파일이 실제로 linted되지 않기 때문에 큰 문제는 아닙니다. gulp-cache은 그런 일이 일어나지 않도록합니다. 그러나 만약 당신이 절대적으로 lint가 한 번만 실행되도록하려면 다른 방법이 있습니다.

해결 방법 2

먼저 당신이 사용해야하는 대신 gulp-watch plugin 내장 gulp.watch() (대신 gaze의 우수한 chokidar 라이브러리를 사용하기 때문에 그건).

그럼 당신은 자신에게 간단한 pausableWatch() 함수를 작성하고 watch 작업에 그것을 사용할 수 있습니다 다음 watcher 위에서

var watch = require('gulp-watch'); 

function pausableWatch(watchedFiles, tasks) { 
    var watcher = watch(watchedFiles, function() { 
    watcher.close(); 
    gulp.start(tasks, function() { 
     pausableWatch(watchedFiles, tasks); 
    }); 
    }); 
} 

gulp.task('watch', function() { 
    pausableWatch('/src/**/*.js', ['lint']); 
}); 

lint 작업이 시작되기 전에 중지됩니다. 따라서 lint 작업 중에 작성된 .js 파일은 watcher을 트리거하지 않습니다. lint 작업이 끝나면 watcher이 다시 시작됩니다.

이 솔루션의 단점은 그 lint 작업이 (가 중지 된 이후) 변화가 watcher에 의해 선택되지 않습니다 실행되는 동안 당신은 .js 파일을 저장합니다. lint 작업이 완료된 후 (watcher이 다시 시작된 경우) .js 파일을 저장해야합니다.

+0

둘러보기 주셔서 감사합니다. 무한 루프가 수정되었습니다. 또한 작업을 한 번만 실행하는 방법을 알고 싶습니다. –

+2

@ JaredChristensen 다른 누군가가 [기본적으로 같은 질문을] 물었 기 때문에 (http://stackoverflow.com/questions/39978779/i-want-to-automatically-fix-my-css-source-files-but-i-get- an-endless-loop) 나는 이것을 두 번째로 보았고 대안적인 해결책을 찾았다. –

관련 문제