2015-01-28 6 views
2

나는 뭉치에있는 js를 연결하고 uglify하기 위하여 자동화를하는 것을 시도하고있다. 여기뭉치에있는 js를 concat와 uglify하는 가장 좋은 방법

내 gulpfile.js입니다 :

gulp.task('compressjs', function() { 
    gulp.src(['public/app/**/*.js','!public/app/**/*.min.js']) 
    .pipe(sourcemaps.init()) 
    .pipe(wrap('(function(){"use strict"; <%= contents %>\n})();')) 
    .pipe(uglify()) 
    .pipe(concat('all.js')) 
    .pipe(rename({ 
     extname: '.min.js' 
    })) 
    .pipe(sourcemaps.write('.')) 
    .pipe(gulp.dest('public/app')); 
}) 

당신이이 모든 파일이 함께 결합 될 때 충돌을 방지하기 위해 (function(){"use strict"; <%= contents %>\n})();으로 모든 파일을 포장하는 데 필요한 생각합니까? 내 꿀꺽 꿀꺽하게하는 일이 좋다고 생각하니, 아니면 그 일을 더 잘 수행 할 수 있겠습니까?

답변

8

대부분의 코드에서 클로저의 모든 파일을 래핑하는 것은 실제로 필요하지 않습니다. 거기에 몇 가지 나쁜 libs 거기에 누설 vars하지만 난 당신이 사건을 기준으로 그들과 함께 거래를 제안하고 가능한 경우 문제를 해결하기 위해 요청을 당기거나 그냥 사용을 중지합니다. 일반적으로 함수에서 단순히 래핑하는 것처럼 고정시킬 수 없습니다.

위의 작업으로 인해 모든 파일이 uglify 작업에 제대로 전달되지 않습니다. 먼저 연결해야합니다. 전체 이름을 연결할 수 있으므로 이름을 바꿀 필요가 없습니다. 다음은 요청했습니다 정확히 수행하기위한 잘 테스트 꿀꺽 설정은 다음과 같습니다

gulp.task('javascript:vendor', function(callback) { 
    return gulp.src([ 
     './node_modules/jquery/dist/jquery.js', 
     './node_modules/underscore/underscore.js', 
     './node_modules/backbone/backbone.js' 
    ]) 
    .pipe(sourcemaps.init()) 
    // getBundleName creates a cache busting name 
    .pipe(concat(getBundleName('vendor'))) 
    .pipe(uglify()) 
    .pipe(sourcemaps.write('./')) 
    .pipe(gulp.dest('./public/app')) 
    .on('error', handleErrors); 
}); 
+0

당신의 getBundleName 기능은 무엇인가? – nightire

+1

require ('package.json')의 SHA 합계를 수행합니다. name + require ('package.json'). version – Baer