2014-09-09 1 views
0

내 공급 업체 js 파일을 bower 종속성에서 가져 와서 자신의 js 파일과 함께 다른 작업을 파이프하고 연결합니다. 하나의 .js 파일. 그리고 Sass 파일에 대해서도 똑같이하십시오.파이프 공급 업체 js 파일을 Bower 및 자체 js 파일을 Gulp의 고유 스트림

어떻게하면됩니까? 나는이 시도했지만 작동하지 않습니다 :

gulp.task('scripts', function() { 
    return gulp.src([ 
     mainBowerFiles(gulpFilter('*.js')), 
     'app/js/*.js' 
     ]) 
     .pipe(uglify()) 
     .pipe(concat('app.js')) 
     .pipe(gulp.dest('./dist/js')); 
}); 

그것은이 오류가 발생합니다 :

TypeError: Arguments to path.resolve must be strings 

을하지만이있는 경우는 예를 들어, 작동 :

gulp.src([ 
    'app/js/etc.js', 
    'app/js/main.js' 
]) 

.. 다음과 같은 경우 다른 오류가 발생합니다 (uglify()가없는 오류는 발생하지 않음).

gulp.src(mainBowerFiles(gulpFilter('*.js'))) 

오류 :

events.js:72 
     throw er; // Unhandled 'error' event 

어떻게 디버깅 하시겠습니까? 다른 스트림에서 공급 업체/자체 js 파일을 분리해야합니까?

이 같은 두 개의 스트림으로 지금 작업하고 event-stream와 나중에 그들을 병합하고있어

갱신 : 그것은 잘 작동하지만, 내가 처리 할 수 ​​아니에요

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

    var jsFilter = gulpFilter('*.js'); 
    var vendorFiles = gulp.src(mainBowerFiles()) // don't read 
     .pipe(jsFilter) 
     .pipe(concat('vendor.js')); 

    var appFiles = gulp.src('app/js/*.js') 
     .pipe(jshint()) 
     .pipe(jshint.reporter('default')) 
     .pipe(concat('app.js')); 

    return es.concat(vendorFiles, appFiles) 
     .pipe(uglify()) 
     .pipe(concat('app.js')) 
     .pipe(gulp.dest('./dist/js')); 
}); 

파일의 순서 분명히 나는 ​​벤더 코드가 목적지 코드 인 앞에 오기를 원하지만, 그렇게되지는 않을 것이다. 나는 here에 관한 스레드를 만들었습니다.

답변

3

gulp-event-streamgulp-order으로 해결했습니다. 그래도 꿀꺽 꿀꺽 주문이 내리막 길을 걷고있는 것 같아. https://www.npmjs.org.

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

    var jsFilter = gulpFilter('*.js'); 
    var vendorFiles = gulp.src(mainBowerFiles()) 
     .pipe(jsFilter) 
     .pipe(concat('vendor.js')); 

    var appFiles = gulp.src('app/js/*.js') 
     .pipe(jshint()) 
     .pipe(jshint.reporter('default')) 
     .pipe(concat('app.js')); 

    return eventStream.concat(vendorFiles, appFiles) 
     .pipe(order([ 
      "vendor.js", 
      "app.js" 
     ])) 
     .pipe(concat('app.js')) 
     .pipe(uglify()) 
     .pipe(gulp.dest('./dist/js')); 
}); 
+3

나는'gulp-order'가'gulp-inject'에 도움이되어 다른 bower 의존성 이전에 부트 스트랩 전에 jquery를 주입하고 있음을 확인했습니다. 파이프 (order ([ '** jquery **', '** bootstrap **']))'gulp.src (mainBowerFiles() – bholben

1

mainBowerFiles()는 배열을 반환합니다. gulp.src는 첫 번째 문제점의 원인 일 가능성이 높은 중첩 배열이 아닌 문자열 배열을 예상합니다.

gulp.src(mainBowerFiles(gulpFilter('*.js')).push('app/js/*.js')) 

내가 처리되지 않은 오류 이벤트 원인을 모르겠어요,하지만 당신은 더 많은 정보를 얻을 꿀꺽 디버그를 사용하여 시도 할 수 있습니다 : 당신은 대신 다음과 같은 시도 할 수 있습니다.

+0

좋은 통찰력! 그러나 그것은 잘못된 오류 :'잘못된 전역 인수 : 4'를 반환했으며'debug()'는 아무것도 표시하지 않고'debug ({verbose : true})도 표시하지 않습니다. 그리고 두 개의 서로 다른 스트림 (공급 업체 및 응용 프로그램 용)을 사용하기로 결정하고 나중에 병합 ('꿀꺽 꿀꺽 거리는 이벤트 - 스트림'- 내 새로운 투쟁)하기 때문에 두 스트림 모두에 독립적으로 작업을 적용 할 수 있습니다. – zok

+0

흠, 아마도 mainBowerFiles()는 gulpFilter를 좋아하지 않습니다. 일반적인 옵션을 살펴 보았습니까? 오브젝트에 경로를 제공해야 할 수도 있습니다. https://github.com/ck86/main-bower-files#common-options – Doodlebot

+0

흠, 나중에 시도해 볼 수도 있습니다. 이제 스트림을 처음부터 분리하고 나중에 꿀꺽 꿀꺽 거리는 이벤트 스트림과 병합하는 것이 좋습니다. - 그것이 더 나은 관행이라고 생각하지 않습니까? 이제 두통은 올바른 순서로 코드를 유지하는 것에 관한 것입니다. 방금이 게시물을 업데이트했습니다. – zok