Apa yang dilakukan opsi "perluas" di grunt-contrib-copy? Semua contoh menggunakannya tetapi dokumen tidak mengatakan apa pun tentang fungsinya


100
  1. Berikut ini README dan contohnya: https://github.com/gruntjs/grunt-contrib-copy/blob/master/README.md .
  2. Berikut adalah bagian kode yang relevan (yang tampaknya tidak saya mengerti) dari https://github.com/gruntjs/grunt-contrib-copy/blob/master/tasks/copy.js :
module.exports = function (mendengus) {
  'gunakan ketat';

  var path = membutuhkan ('path');

  grunt.registerMultiTask ('copy', 'Salin file.', function () {
    var kindOf = grunt.util.kindOf;

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

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

    grunt.verbose.writeflags (opsi, 'Opsi');

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

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

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

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

Apakah Anda sadar bahwa jawaban yang diterima salah? Lihat jawaban ini di bawah .
David Pärsson

Jawaban:


59

Perluas memungkinkan Anda menentukan apakah Anda ingin membuat jalur tujuan secara penuh (misalnya:) /path/missing1/missing2, atau hanya membuat direktori terakhir jika induknya ada ( /path/existing/missing).


4
Ah, jadi ini efektif opsi -p ke mkdir. Oke, terima kasih!
Patrick

6
Jawaban ini tidak benar. Ini paling-paling disederhanakan.
David Pärsson

3
-1. Ini menyesatkan - berdasarkan jawaban ini saya hapus expand: true, mengira saya tidak membutuhkannya, dan kemudian bangunan saya berhenti berfungsi.
Claudiu

82

Karena expandmerupakan bagian dari Grunt, dan tidak spesifik untuk grunt-contrib-copy, informasi tentangnya dapat ditemukan di API konfigurasi file Grunt :

Setel expanduntuk truemengaktifkan opsi berikut:

  • cwdSemua srckecocokan relatif terhadap (tetapi tidak menyertakan) jalur ini.
  • srcPola yang akan dicocokkan, terkait dengan cwd.
  • dest Awalan jalur tujuan.
  • extGanti ekstensi apa pun yang ada dengan nilai ini di destjalur yang dibuat .
  • extDotDigunakan untuk menunjukkan di mana periode yang menunjukkan ekstensi berada. Dapat mengambil salah satu 'first'(ekstensi dimulai setelah periode pertama dalam nama file) atau 'last'(ekstensi dimulai setelah periode terakhir), dan diatur secara default ke 'first'.
  • flattenHapus semua bagian jalur dari destjalur yang dihasilkan .
  • renameFungsi ini dipanggil untuk setiap srcfile yang cocok , (setelah penggantian nama ekstensi dan perataan). Jalur destdan yang cocok srcdilewatkan, dan fungsi ini harus mengembalikan destnilai baru . Jika hal yang sama destdikembalikan lebih dari sekali, masing-masing srcyang digunakan akan ditambahkan ke larik sumber untuknya.

Selain itu, sepertinya destakan selalu dianggap sebagai direktori tujuan jika disetel expandke true.


Jawaban yang lebih baik. Tetapi apakah ini tidak didokumentasikan di mana pun?
syonip

Saya benar-benar menemukan dokumentasinya setelah melihat kedua kalinya, dan saya telah memperbarui jawaban saya.
David Pärsson

Saya menambahkan contoh berguna yang disediakan di dokumen. Sekarang lebih jelas.
Rémi Becheras
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.