Was macht die Option "Erweitern" in Grunt-Contrib-Copy? Die Beispiele verwenden es alle, aber die Dokumente sagen nichts darüber aus, was es tut

100
  1. Hier ist die README-Datei und Beispiele: https://github.com/gruntjs/grunt-contrib-copy/blob/master/README.md .
  2. Hier ist der relevante Teil des Codes (den ich anscheinend nicht verstehen kann) von https://github.com/gruntjs/grunt-contrib-copy/blob/master/tasks/copy.js :
module.exports = function (grunzen) {
  '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 = {
      Prozess: options.processContent,
      noProcess: options.processContentExclude
    };

    grunt.verbose.writeflags (Optionen, 'Optionen');

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

    this.files.forEach (Funktion (filePair) {
      isExpandedPair = filePair.orig.expand || falsch;

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

        if (grunt.file.isDir (src)) {
          grunt.verbose.writeln ('Erstellen' + dest.cyan);
          grunt.file.mkdir (dest);
          tally.dirs ++;
        } else {
          grunt.verbose.writeln ('Kopieren' + src.cyan + '->' + dest.cyan);
          grunt.file.copy (src, dest, copyOptions);
          tally.files ++;
        }}
      });
    });
Patrick
quelle
Ist Ihnen bewusst, dass die akzeptierte Antwort falsch ist? Siehe diese Antwort unten .
David Pärsson

Antworten:

59

Mit Erweitern können Sie angeben, ob Sie den Zielpfad vollständig erstellen möchten (z. B. :) /path/missing1/missing2oder nur das letzte Verzeichnis erstellen möchten, wenn das übergeordnete Verzeichnis vorhanden ist ( /path/existing/missing).

Vladimir Georgiev
quelle
4
Ah, also ist es effektiv die Option -p für mkdir. Habe ich, danke!
Patrick
6
Diese Antwort ist nicht korrekt. Es ist bestenfalls vereinfacht.
David Pärsson
3
-1. Dies ist irreführend - basierend auf dieser Antwort, die ich entfernt habe expand: true, weil ich dachte, ich brauche sie nicht, und dann funktionierte mein Build nicht mehr.
Claudiu
82

Da expandes sich um einen Teil von Grunt handelt und nicht spezifisch für Grunt-Contrib-Copy ist, finden Sie Informationen dazu in der Dateikonfigurations-API von Grunt :

Stellen Sie ein expand, trueum die folgenden Optionen zu aktivieren:

  • cwdAlle srcÜbereinstimmungen beziehen sich auf diesen Pfad (schließen ihn jedoch nicht ein).
  • srcÜbereinstimmende Muster relativ zum cwd.
  • dest Zielpfadpräfix.
  • extErsetzen Sie alle vorhandenen Erweiterungen in generierten destPfaden durch diesen Wert .
  • extDotWird verwendet, um anzugeben, wo sich der Zeitraum befindet, der die Nebenstelle angibt. Kann entweder 'first'(Erweiterung beginnt nach dem ersten Punkt im Dateinamen) oder 'last'(Erweiterung beginnt nach dem letzten Punkt) und ist standardmäßig auf eingestellt 'first'.
  • flattenEntfernen Sie alle Pfadteile aus den generierten destPfaden.
  • renameDiese Funktion wird für jede übereinstimmende srcDatei aufgerufen (nach dem Umbenennen und Reduzieren der Erweiterung). Der destund der übereinstimmende srcPfad werden übergeben, und diese Funktion muss einen neuen destWert zurückgeben. Wenn dasselbe destmehr als einmal zurückgegeben wird, wird jedes, srcdas es verwendet hat, einem Array von Quellen dafür hinzugefügt.

Außerdem scheint es, als würde destes immer als Zielverzeichnis betrachtet, wenn es expandauf gesetzt wird true.

David Pärsson
quelle
Bessere Antwort. Aber ist das nirgendwo dokumentiert?
Syonip
Ich habe die Dokumentation tatsächlich nach einem zweiten Blick gefunden und meine Antwort entsprechend aktualisiert.
David Pärsson
Ich habe das nützliche Beispiel im Dokument hinzugefügt. Es ist jetzt klarer.
Rémi Becheras