Do czego służy opcja „expand” w kopiach grunt-contrib-copy? Wszystkie przykłady go używają, ale dokumentacja nie mówi nic o tym, co robi

100
  1. Oto plik README i przykłady: https://github.com/gruntjs/grunt-contrib-copy/blob/master/README.md .
  2. Oto odpowiednia część kodu (której najwyraźniej nie rozumiem) z https://github.com/gruntjs/grunt-contrib-copy/blob/master/tasks/copy.js :
module.exports = function (grunt) {
  „użyj ścisłego”;

  var path = require ('path');

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

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

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

    grunt.verbose.writeflags (opcje, „Opcje”);

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

    this.files.forEach (function (filePair) {
      isExpandedPair = filePair.orig.expand || fałszywe;

      filePair.src.forEach (function (src) {
        if (detectionDestType (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 ('Tworzenie' + dest.cyan);
          grunt.file.mkdir (dest);
          tally.dirs ++;
        } else {
          grunt.verbose.writeln ('Kopiowanie' + src.cyan + '->' + dest.cyan);
          grunt.file.copy (src, dest, copyOptions);
          tally.files ++;
        }
      });
    });
Patrick
źródło
Czy wiesz, że przyjęta odpowiedź jest nieprawidłowa? Zobacz tę odpowiedź poniżej .
David Pärsson,

Odpowiedzi:

59

Rozwiń pozwala określić, czy chcesz utworzyć ścieżkę docelową w całości (np . /path/missing1/missing2:), czy tylko ostatni katalog, gdy istnieje jego nadrzędny ( /path/existing/missing).

Vladimir Georgiev
źródło
4
Ach, więc efektywnie jest to opcja -p dla mkdir. Mam to, dzieki!
Patrick,
6
Ta odpowiedź jest nieprawidłowa. W najlepszym przypadku jest to uproszczone.
David Pärsson
3
-1. Jest to mylące - na podstawie tej odpowiedzi usunąłem expand: true, uznając, że jej nie potrzebuję, a potem moja kompilacja przestała działać.
Claudiu
82

Ponieważ expandjest częścią Grunta, a nie specyficzną dla grunt-contrib-copy, informacje o tym można znaleźć w interfejsie API konfiguracji plików Grunt :

Ustaw, expandaby truewłączyć następujące opcje:

  • cwdWszystkie srcdopasowania są względne (ale nie obejmują) tej ścieżki.
  • srcWzorzec (wzorce) do dopasowania, względem cwd.
  • dest Prefiks ścieżki docelowej.
  • extZastąp istniejące rozszerzenie tą wartością w wygenerowanych destścieżkach.
  • extDotSłuży do wskazania, gdzie znajduje się okres wskazujący na rozszerzenie. Może mieć wartość 'first'(rozszerzenie zaczyna się po pierwszej kropce w nazwie pliku) lub 'last'(rozszerzenie zaczyna się po ostatniej kropce) i jest domyślnie ustawione na 'first'.
  • flattenUsuń wszystkie części ścieżki z wygenerowanych destścieżek.
  • renameTa funkcja jest wywoływana dla każdego dopasowanego srcpliku (po zmianie nazwy rozszerzenia i spłaszczeniu). destI dopasowana srcścieżka zapadają się, a ta funkcja musi zwracać nową destwartość. Jeśli to samo destzostanie zwrócone więcej niż raz, każdy, srcktóry go użył, zostanie dodany do tablicy źródeł.

Dodatkowo wydaje się, destże zawsze będzie uważany za katalog docelowy, jeśli ustawisz expandna true.

David Pärsson
źródło
Lepsza odpowiedź. Ale czy nie jest to nigdzie udokumentowane?
syonip
Właściwie znalazłem dokumentację po drugim spojrzeniu i odpowiednio zaktualizowałem moją odpowiedź.
David Pärsson
Dodałem przydatny przykład podany w dokumencie. Teraz jest bardziej jasne.
Rémi Becheras