2016-12-28 1 views
0

내 gulpfile에 jshint가 있더라도 js 파일에 오류가있을 때마다 서버가 계속 중지됩니다. 내가 jshint를 설치하고 js 파일의 오류를보고했기 때문에 그것을 내 프로젝트에 포함 시켰습니다. 그러나 여전히 실패하고 있습니다. 이 문제를 어떻게 해결할 수 있습니까?gulp는 gulpfile.js에 포함 된 jshint를 사용하더라도 오류가 발생하면 서버를 중지합니다.

gulp.task('scripts',() => { 
    return gulp.src('assets/js/src/*.js') 
     .pipe(jshint()) 
     .pipe(jshint.reporter('jshint-stylish', {beep: true})) 
     .pipe(concat('main.js')) 
     .pipe(gulp.dest('assets/js/build/')) 
     .pipe(uglify()) 
     .pipe(gulp.dest('assets/js/')) 
     .pipe(browserSync.stream({stream: true})); 
}); 

답변

2

gulp-jshint JavaScript 파일의 오류를보고합니다. 아무것도 더, 아무것도 덜. uglify()과 같은 파이프 스테이지에 결함이있는 JavaScript 파일이 도달하는 것을 방지하지 않습니다 (자바 스크립트 파일에 오류가있는 경우 서버가 중지되어 서버를 중지시킵니다).

gulp.task('jshint',() => { 
    return gulp.src('assets/js/src/*.js') 
     .pipe(jshint()) 
     .pipe(jshint.reporter('jshint-stylish', {beep: true})) 
     .pipe(jshint.reporter('fail')) 
}); 

그런 다음 당신은 당신의 scripts을해야합니다 당신은 당신의 서버를 부수고에서 결함이 자바 스크립트 파일을 방지하려면

, 당신은 자신의 작업에 모든 jshint 물건을 넣어 작업 fails when any JavaScript file has an error 있는지 확인해야 작업은 jshint 작업에 따라 다음 jshint 작업이 성공하면

gulp.task('scripts', ['jshint'],() => { 
    return gulp.src('assets/js/src/*.js') 
     .pipe(concat('main.js')) 
     .pipe(gulp.dest('assets/js/build/')) 
     .pipe(uglify()) 
     .pipe(gulp.dest('assets/js/')) 
     .pipe(browserSync.stream({stream: true})); 
}); 

지금 당신의 scripts 작업 만 실행됩니다. 어떤 JavaScript 파일에 결함이있는 경우 jshint은 서버가 JavaScript의 마지막 좋은 버전을 사용하여 계속 실행되는 동안 오류를 콘솔에 출력합니다.

+0

효과가있었습니다. 고마워요 :) – jst16

0

간단한 수정은 좀 더 우아하게 에러를 처리하기 위해 꿀꺽 - 배관공을 사용하는 것입니다 :이 업데이트되지 않도록 축소 된 파일을 방지 할 수 있기 때문에 개인적으로

var plumber = require("gulp-plumber"); 

gulp.task('scripts',() => { 
    return gulp.src('assets/js/src/*.js') 
     .pipe(plumber()) 
     .pipe(jshint()) 
     .pipe(jshint.reporter('jshint-stylish', {beep: true})) 
     .pipe(concat('main.js')) 
     .pipe(gulp.dest('assets/js/build/')) 
     .pipe(uglify()) 
     .pipe(gulp.dest('assets/js/')) 
     .pipe(browserSync.stream({stream: true})); 
}); 

, 나는 그 솔루션을 좋아하지 않는다. 다음은 내가 추천하는 내용입니다.

var jshintSuccess = function (file) { 
    return file.jshint.success; 
} 

gulp.task('scripts',() => { 
    return gulp.src('assets/js/src/*.js') 
     .pipe(sourcemaps.init()) 
     .pipe(jshint()) 
     .pipe(jshint.reporter('jshint-stylish', { 
      beep: true 
     })) 
     .pipe(gulpif(jshintSuccess, uglify())) 
     .pipe(concat('main.js')) 
     .pipe(sourcemaps.write('maps')) 
     .pipe(gulp.dest('assets/js/')) 
     .pipe(browserSync.stream({ 
      stream: true 
     })); 
}); 

먼저 여러 목적지에 쓰지 않습니다. 대신 소스 맵을 사용하므로 코드가 필요하지 않습니다. 둘째, 조건 적으로 jshint의 결과에 따라 uglify를 통해 코드를 파이프하는 경우 gulp-if를 사용합니다. 오류가있는 코드는 uglify를 우회하여 대상 파일로 계속 전달합니다.

이제 개발자 도구를 사용하여 검사하고 디버그 할 수 있습니다.

참고 : 저는 로컬 개발에만 권장합니다. 나는이 코드를 연속 통합 파이프 라인에 연결하지 않을 것입니다. 왜냐하면 여러분은 코드를 생산에 투입하기를 원하기 때문입니다. 다른 작업을 설정하거나 다른 gulp-if 조건을 추가하여 환경 변수에 따라 빌드 된 코드가 작성되지 않도록하십시오.

관련 문제