2013-06-07 11 views
92
  1. İşte README ve örnekler: https://github.com/gruntjs/grunt-contrib-copy/blob/master/README.md. : (/path/missing1/missing2 örn)
 
module.exports = function(grunt) { 
    'use strict'; 

    var path = require('path'); 

    grunt.registerMultiTask('copy', 'Copy files.', function() { 
    var kindOf = grunt.util.kindOf; 

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

    var copyOptions = { 
     process: options.processContent, 
     noProcess: options.processContentExclude 
    }; 

    grunt.verbose.writeflags(options, 'Options'); 

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

    this.files.forEach(function(filePair) { 
     isExpandedPair = filePair.orig.expand || false; 

     filePair.src.forEach(function(src) { 
     if (detectDestType(filePair.dest) === 'directory') { 
      dest = (isExpandedPair) ? filePair.dest : unixifyPath(path.join(filePair.dest, src)); 
     } else { 
      dest = filePair.dest; 
     } 

     if (grunt.file.isDir(src)) { 
      grunt.verbose.writeln('Creating ' + dest.cyan); 
      grunt.file.mkdir(dest); 
      tally.dirs++; 
     } else { 
      grunt.verbose.writeln('Copying ' + src.cyan + ' -> ' + dest.cyan); 
      grunt.file.copy(src, dest, copyOptions); 
      tally.files++; 
     } 
     }); 
    }); 

cevap

57

Eğer tam olarak hedef yolu oluşturmak isteyip istemediğinizi belirtmek sağlar genişletin:

  • İşte https://github.com/gruntjs/grunt-contrib-copy/blob/master/tasks/copy.js kod ilgili kısmı (ben görünüşte anlayamıyorum o) 'dir veya yalnızca ebeveyn varsa, son dizini oluşturun (/path/existing/missing). expand yana

  • +4

    Ah, bu yüzden etkin bir şekilde -k seçeneği mkdir. Anladım, teşekkürler! – Patrick

    +4

    Bu cevap doğru değil. En iyisi basitleştirilmiştir. –

    +2

    -1. Bu yanıltıcıdır - bu cevaba dayanarak 'genislet: true' öğesini kaldırdım, ihtiyacım olmadığına karar verdim, ve sonra yapığım çalışmayı durdurdu. – Claudiu

    69

    bir Grunt parçası ve hırıltı-contrib-kopya için özel değildir, bu konuda bilgi Grunt's file configuration API bulunabilir:

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

    • cwd Tüm src eşleşmeleri, bu yola göre (ancak eklemeyin) eşleşir. cwd ile eşleşecek desen (ler),
    • .
    • dest Hedef yol öneki.
    • ext Varolan tüm uzantıları, oluşturulan dest yollarında bu değerle değiştirin.
    • extDot Uzantıyı gösteren sürenin nerede olduğunu belirtmek için kullanılır. 'first' (uzantı dosya adında ilk dönemden sonra başlar) veya 'last' (uzantı son dönemden sonra başlar) alabilir ve varsayılan olarak 'first' olarak ayarlanır.
    • flatten Oluşturulan dest yollarından tüm yol bölümlerini kaldırın. Bu işlev, eşleşen her bir src dosyası için (uzantı yeniden adlandırıldıktan ve düzleştirildikten sonra) çağrılır. dest ve eşleşen src yoluna geçirilir ve bu işlev yeni bir dest değeri döndürmelidir. Aynı dest bir kereden fazla döndürülürse, kullanılan her src, bunun için bir dizi kaynağa eklenir. dest hep true için expand ayarı eğer bir hedef dizin olarak kabul edilecektir gibi

    Ayrıca öyle görünüyor.

    +0

    Daha iyi cevap. Ama bu herhangi bir yerde belgelenmemiş mi? – syonip

    +0

    İkinci kez baktıktan sonra belgeleri buldum ve cevabımı buna göre güncelledim. –

    +0

    Dokümanda sağlanan kullanışlı örneği ekledim. Şimdi daha net. –