Dizinleri ve dosyalarını seçmek ve taşımak için gulp kullanın


98

Şu anda dist/dizinimi temizleyen ve uygun dosyaları temiz dizine taşıyan bir bash betiğini çağırmak için gulp kullanıyorum . Bunun gulp ile yapılmasını istiyorum çünkü betiğin * nix olmayan bir dosya sisteminde çalışacağından emin değilim.
Şimdiye kadar dist/dizini temizlemek için gulp-clean modülünü kullanıyorum, ancak gerekli dizinleri ve dosyalarını dist klasörüne taşımaya çalıştığımda dizinler boş.

var gulp = require('gulp'),
    clean = require('gulp-clean');

gulp.task('clean', function(){
  return gulp.src(['dist/*'], {read:false})
  .pipe(clean());
});

gulp.task('move',['clean'], function(){
  gulp.src(['_locales', 'icons', 'src/page_action', 'manifest.json'])
  .pipe(gulp.dest('dist'));
});

gulp.task('dist', ['move']);

arama gulp dist, dist/dizinde doğru dizinlerle doldurulur, ancak hepsi boştur

$ ls dist/*
dist/manifest.json

dist/_locales:

dist/icons:

dist/page_action:

Dizinleri ve içeriklerini dist/klasöre nasıl kopyalarım ?

Yanıtlar:


162

Dosya yapısını istediğiniz gibi koruyan src baseseçeneğini eklemeniz gerekir :

var filesToMove = [
        './_locales/**/*.*',
        './icons/**/*.*',
        './src/page_action/**/*.*',
        './manifest.json'
    ];

gulp.task('move',['clean'], function(){
  // the base option sets the relative root for the set of files,
  // preserving the folder structure
  gulp.src(filesToMove, { base: './' })
  .pipe(gulp.dest('dist'));
});

Ayrıca, projenizin kök dizininde tüm bu kaynak dosyalara sahipseniz, muhtemelen yolda sorun yaşarsınız.

Eğer yapabilirsiniz, ben tek kullanmak öneriyoruz src/klasör ve hareket tüm orada içine uygulamaya özgü dosyaları. Bu, bakımın ilerlemesini kolaylaştırır ve derlemeye özel dosyalarınızın uygulamaya özel dosyalarınızla karışmasını önler.

Bunu yaparsanız, yukarıdaki örnekte tüm oluşumlarını ./ile değiştirin src/.


1
Yalnızca dosyaları yeniden düzenledikten sonra mükemmel çalıştı, ancak mantığınız sağlam, bu yüzden cevabınızı doğru olarak işaretliyorum. Teşekkür ederim.
makenova

2
Bunun tersini yapmak için yutkunma kullanın. stackoverflow.com/questions/21153338/…
Tony Gutierrez

2
Bunu yapan başkalarına not olarak, src'de readseçeneğin false( truevarsayılan olarak ayarlanmıştır ) olarak ayarlanmadığından emin olun .
yndolok

3
Bunu yaptığımda, tüm kök dizinlerle kopyalıyor.
Nomadme

5

Orijinal soru yalnızca dizinleri (klasörler olarak da bilinir) hedefler gulp.src, yani gulp.src(['_locales', ...bu örnekte _localesbir dizinin adıdır .

Kabul cevap kullandığı globdesen onun içinde gulp.srchedef dosyaları , her yerde o dizinlerde yani gulp.src(['./_locales/**/*.*', ..., (haber çift yıldız ve filename.extension yıldız). Kabul edilen cevap işe yarıyor ...

... ancak kabul edilen yanıt yalnızca şu baseseçeneği vurgular :

Src baseseçeneğini eklemeniz gerekir ...

Denedim ve buldum:

  1. Açıkçası base, OP'nin sorduğu şeye ulaşmak için seçeneği kullanmak gereksizdir : "... ve uygun dosyaları temiz dizine taşır ." baseSeçenek yok aslında korumak klasör + dosya yapısını (kabul yanıt açıklandığı gibi), ancak baseseçenektir yeterli değildir OP gibi dosyaları taşımak istedi . Klasör + dosya yapısını korumak, muhtemelen OP'nin beklediği şeydir , bu nedenle kabul edilen cevap iyidir, ancak ...

  2. Sadece ne yinelemesi gelmez dosya taşımak, bu kadar globdesenler

    1. Çift yıldız işareti ( .../**/...) tüm alt klasörlerde ve alt klasörlerin alt klasörlerinde, vb. Yinelemeli olarak arar.

    2. Dosyaadı.uzantı asterisks ( .../*.*) tüm adların ve tüm uzantıların dosyalarını bulur . Bu yüzden bence bu kısım en çok vurguyu hak ediyor!

  3. Kabul edilen cevap başka bir şeyi değiştirir; ./iletilen her yol bağımsız değişkenine bir önek ekler gulp.src. Bunun gereksiz / gereksiz olduğunu düşünüyorum; eğer yoksa ./(OP sorusunda olduğu gibi) yollar mevcut dizine göre çözümlenir - bu da aynı davranışa neden olur . Ancak belki de açık olmak iyi bir uygulamadır../

Yanılıyorsam haberim olsun ...

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.