Grunt-Contrib-copy'deki "genişletme" seçeneği ne işe yarar? Tüm örnekler onu kullanıyor ama dokümanlar ne yaptığı hakkında hiçbir şey söylemiyor


100
  1. İşte README ve örnekler: https://github.com/gruntjs/grunt-contrib-copy/blob/master/README.md .
  2. Https://github.com/gruntjs/grunt-contrib-copy/blob/master/tasks/copy.js adresinden kodun ilgili kısmı (görünüşe göre anlayamadığım) :
module.exports = function (grunt) {
  'sıkı kullanın';

  var yol = gerekli ('yol');

  grunt.registerMultiTask ('copy', 'Dosyaları kopyala.', function () {
    var kindOf = grunt.util.kindOf;

    var options = this.options ({
      processContent: false,
      processContentExclude: []
    });

    var copyOptions = {
      süreç: options.processContent,
      noProcess: options.processContentExclude
    };

    grunt.verbose.writeflags (seçenekler, 'Seçenekler');

    var dest;
    var isExpandedPair;
    var tally = {
      dirs: 0,
      dosyalar: 0
    };

    this.files.forEach (function (filePair) {
      isExpandedPair = filePair.orig.expand || yanlış;

      filePair.src.forEach (function (src) {
        if (detectDestType (filePair.dest) === 'dizin') {
          dest = (isExpandedPair)? filePair.dest: unixifyPath (yol.join (filePair.dest, src));
        } Başka {
          dest = filePair.dest;
        }

        eğer (grunt.file.isDir (src)) {
          grunt.verbose.writeln ('Oluşturuluyor' + dest.cyan);
          grunt.file.mkdir (dest);
          tally.dirs ++;
        } Başka {
          grunt.verbose.writeln ('Kopyalama' + src.cyan + '->' + dest.cyan);
          grunt.file.copy (src, dest, copyOptions);
          tally.files ++;
        }
      });
    });

Kabul edilen cevabın yanlış olduğunun farkında mısınız? Bkz Aşağıda bu cevabı .
David Pärsson

Yanıtlar:


59

Genişlet, hedef yolu tam olarak mı (örneğin:) /path/missing1/missing2yoksa sadece son dizini üst dizin varken mi oluşturmak istediğinizi ( /path/existing/missing) belirlemenizi sağlar.


4
Ah, bu yüzden mkdir için -p seçeneği etkili. Anladım, teşekkürler!
Patrick

6
Bu cevap doğru değil. En iyi ihtimalle basitleştirilmiştir.
David Pärsson

3
-1. Bu yanıltıcıdır - bu cevaba dayanarak kaldırdım expand: true, ihtiyacım olmadığını anladım ve sonra yapım çalışmayı durdurdu.
Claudiu

82

Yana expandbir Grunt parçası ve hırıltı-contrib-kopya için özel değildir, bu konuda bilgi bulunabilir Grunt dosya yapılandırması API :

Set expandiçin trueaşağıdaki seçenekleri etkinleştirmek için:

  • cwdTüm srceşleşmeler bu yola görelidir (ancak içermez).
  • srcEşleştirilecek desen (ler) cwd,.
  • dest Hedef yol öneki.
  • extOluşturulan destyollarda mevcut herhangi bir uzantıyı bu değerle değiştirin .
  • extDotUzantının bulunduğu dönemin nerede olduğunu belirtmek için kullanılır. Ya 'first'(uzantı dosya adındaki ilk noktadan sonra başlar) veya 'last'(uzantı son noktadan sonra başlar) alabilir ve varsayılan olarak olarak ayarlanır 'first'.
  • flattenOluşturulan destyollardan tüm yol parçalarını kaldırın .
  • renameBu işlev her eşleşen srcdosya için çağrılır (uzantı yeniden adlandırdıktan ve düzleştirdikten sonra). destVe eşleşen srcyol geçirildiğinde ve bu fonksiyon yeni dönmelidir destdeğer. Aynı destşey birden fazla döndürülürse, srckullanılan her biri bunun için bir kaynak dizisine eklenecektir.

Buna ek olarak benziyor desthep ayarı eğer bir hedef dizin olarak kabul edilecektir expandiçin true.


Daha iyi cevap. Ama bu hiçbir yerde belgelenmemiş mi?
syonip

Aslında dokümantasyonu ikinci kez baktıktan sonra buldum ve cevabımı buna göre güncelledim.
David Pärsson

Belgede verilen yararlı örneği ekledim. Şimdi daha net.
Rémi Becheras
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.