2014-07-16 10 views
8

Birleştirilmiş JS dosyaları oluşturan bir yontma görevi var. Projedeki tüm dosyaların değişikliklerini algılamak için bir saat kullanıyorum ve kaynak dosyalarının son yürütme işleminden bu yana değişmesi durumunda, concat görevinin dosyaları yeniden birleştirmesini isterim.Yalnızca kaynak dosya (lar) değiştiyse, yalnızca görev atlatmak için GTP görev boru hattı

not: Daha belirgin izle komutlarını kullanabilirsiniz, ama benim gerçek üretim durumda biz çok daha karmaşık böylece bunların her biri için saatler ve görevleri oluştururken,

kaynak JS dosyaları çoklu kombinasyonlar birden fazla concatenanted JS dosyalarına edilir ürettiğini böyle

şey:

gulp.task('scripts', function() { 
    return gulp.src('src/**/*.js') 
     .pipe(cache('scripts')) 
     // If no changed files in pipeline, exit pipeline, 
     // else add in all src files again 
     .pipe(concat('app.js')) 
     .pipe(gulp.dest('build/')); 
}); 

Ben sadece concat çalıştırın ve dosya varsa dest böylece son iki adım için bir lazypipe kullanma hakkında düşündüm, ama bilmiyorum nasıl:

  • deposunun bulunması sonrasında (hala boru hattının kalan herhangi dosyalar olup olmadığını dayalı bir koşul Run()
  • tüm kaynak dosyaları geri getirin (temelde
) akışı jikleleyin için tekrar) gulp.src (yeniden ihraç

İkinci bölüm için gulp-hatırlamayı kullanabileceğimi biliyorum, ancak üretim durumumda, eğer mümkünse akışı yeniden oluşturmak çok daha temiz olacaktır.

Bunu daha önce kim yaptıysa veya nereden başlayacağınıza dair ipuçlarınız var mı?

+0

[gulp-changed] 'a bakabilirsiniz (https://www.npmjs.org/package/gulp-changed/)? –

+0

@JoshClayton Ben gulp-değiştirilen check-out yaptım ve bu konuyla ilgili olarak gulp-cached ile aynı davranacak gibi görünüyor. (yani, aslında aslında işlenmesi gereken akıştaki giriş dosyalarından geçebilir). Tüm src dosyalarını yeniden çıkarıp tekrar eklemeyle ilgili sorunu çözeceğini görmüyorum. – Allen

cevap

1

Eklentiyi gulp-newer yapmalısınız.

gulp.task('scripts', function() { 
    return gulp.src('src/**/*.js') 
     .pipe(newer('app.js')) 
     .pipe(concat('app.js')) 
     .pipe(gulp.dest('build/')); 
}); 
0

Bu eski bir soru olsa da, sadece yeni bir bilgi eklemek istiyorum. Gulp-newer, dosyaların zaman damgasına göre değişiklikleri algılar, bir dosya silinirse, gulp-newer bu değişikliği seçmez.

Bunun nedeni, css dosyalarından birinin silinmesi veya değiştirilmesinin, ancak daha yeni olanın tümünü desteklememesi durumunda oluşturulacak ana dosyama ihtiyaç duyduğumdan, önbellekleme yolunu daha yeni değil, aşağıdan aşağıya bakıyorum.

3

moettinger's answer (at the time of writing)'daki kod yanlış. İşte akışı döndürmektir:

return gulp.src('src/**/*.js') 
    .pipe(newer('build/app.js')) 
    .pipe(concat('app.js')) 
    .pipe(gulp.dest('build/')); 

newer() çağrı geçerli dizine (veya mutlak bir yol) göreli bir yol geçirilmelidir tek hedefe karşı test. gulp.dest()'da verilen yola göre yorumlanacak bir yol olamaz. newer('app.js') numaralı çağrı ile newer numaralı çağrı, her zaman dosyayı bulamayacağından çalıştırılmak üzere concat neden olacaktır.

documentation, benzer bir example verir.