Dosyaları gulp olarak kopyalamanın ve ana dizine göre yeniden adlandırmanın bir yolunu arıyorum


91

Her modül için, yapı dizinine kopyalanması gereken bazı dosyalarım var ve tekrarlanan kodu bundan en aza indirmenin bir yolunu arıyorum:

gulp.src('./client/src/modules/signup/index.js')
  .pipe(gulp.dest('./build/public/js/signup'));

gulp.src('./client/src/modules/admin/index.js')
  .pipe(gulp.dest('./build/public/js/admin'));

bunun gibi bir şeye:

gulp.src('./client/src/modules/(.*)/index.js')
  .pipe(gulp.dest('./build/public/js/$1'));

Açıkçası yukarıdakiler işe yaramıyor, bu yüzden bunu yapmanın bir yolu var mı, yoksa bunu zaten yapan bir npm var mı?

Teşekkürler

Yanıtlar:


131

En iyi yol, basedosyalarınızı kaynak alırken aşağıdaki gibi yapılandırmaktır :

gulp.src('./client/src/modules/**/index.js', {base: './client/src/modules'})
  .pipe(gulp.dest('./build/public/js/'));

Bu gulp, modüller dizinini göreli yolları belirlemek için başlangıç ​​noktası olarak kullanmayı söyler .

(Ayrıca, /**/*.jstüm JS dosyalarını dahil etmek istiyorsanız kullanabilirsiniz ...)


6
Bunu yapmanın daha dinamik bir yolu olmalı - src dosyaları 2 farklı dizinden geldiğinde ve dizinlerini dest içinde korumak istediğinizde ne olacak?
Ivan Durst

1
@IvanDurst Bu özel durumu OP (cevap) kodu ile yönettim. Baz yapılandırma kullanarak ve bağımsız dosyalar ve yutkunmak dosyasından göreli yolu kullanarak ./folder-example/**tam klasörler ve dosyalar.
Caio Wilson

210

Cevap değil, ancak bu sorunun arama sonuçlarındaki görünümü için geçerli.

Dosyaları / klasörleri gulp olarak kopyalamak için

gulp.task('copy', () => gulp
  .src('index.js')
  .pipe(gulp.dest('dist'))
);

2
Hmmm ... yudum, bu görevin tamamlandığını söylüyor, ancak çıktı dosyası mevcut değil.
Tyguy7

4
Gulp'a görev bittiğinde haber vermek için yayını geri getirmelisiniz.
Merott

2
"Cevap değil" diyen bir cevabın, soruyu cevaplayan kabul edilmiş cevaptan daha fazla olumlu oyu olmasının neden kafam karıştı. SO'yu, arama motorlarının soruya yanıtlar sağlamak yerine belirli bir şey yapmasını sağlamak için tasarlanmış yanıtlarla karıştırmamız gerektiğinden emin değilim. Sanırım siteyi taradıklarında elde ettikleri şeyden faydalı bir şeyler yapmak arama motorlarının işi. Sadece 0,02
dolarım

9
@jinglesthula Arama motorunun işini ne kadar iyi yaptığına bakılmaksızın, bu soruya arama motorları aracılığıyla ulaşanlar için faydalı bir hizmettir. Bunu takdir ediyorum.
jbkly

1
haha bunun doğru sorudan veya doğru cevaptan daha popüler olduğunu fark etti: P
Kirk Strobeck

5
return gulp.src('./client/src/modules/(.*)/index.js')  
  .pipe(gulp.dest('./build/public/js/$1'));

Benim için çalıştı!


.. Hatta hala bu olduğunu cevap.
Kirk Strobeck

2
... yani birisi onu olduğu gibi çalışması için yeniden yazabilir , böylece bu sayfaya gelen kişiler tam olarak bu kod parçacığını arayabilir mi?
Ivan Durst

Öyleyse ... src / dest glob'larında parenlere ve $ n "geri başvurulara" izin veriliyor mu? Normal ifade değiller afaik. Bu aradığım şeye benziyor ama vinyl-fs belgeleri .src () ve .dest () seçenekleri ve bunlarda nelere izin verildiği ve nasıl çalıştıkları konusunda oldukça kısa.
jinglesthula

3

Giriş dizin ağacını korumak için kullanın korunacaktır.

.pipe(gulp.dest(function(file) {
    var src = path.resolve(SRC_FOLDER);
    var final_dist = file.base.replace(src, '');
    return DIST_FOLDER + final_dist;
}))

Bu kullanarak, src koyabilirsiniz: .src(SRC_FOLDER + '/**/*.js').

Diğer yanıtlar benim için işe yaramadı ( base:on src()} kullanmak gibi , çünkü bazı eklentiler dizin ağacını düzleştirir.


0

dosyaları paralel olarak kopyala

gulp.task('copy', gulp.parallel(
() =>  gulp.src('*.json').pipe(gulp.dest('build/')),
() =>  gulp.src('*.ico').pipe(gulp.dest('build/')),
() =>  gulp.src('img/**/*').pipe(gulp.dest('build/img/')),
)
);
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.