Que fait l'option «expand» dans grunt-contrib-copy? Les exemples l'utilisent tous, mais la documentation ne dit rien sur ce qu'il fait

100
  1. Voici le README et des exemples: https://github.com/gruntjs/grunt-contrib-copy/blob/master/README.md .
  2. Voici la partie pertinente du code (que je ne peux apparemment pas comprendre) de https://github.com/gruntjs/grunt-contrib-copy/blob/master/tasks/copy.js :
module.exports = fonction (grognement) {
  'use strict';

  var chemin = require ('chemin');

  grunt.registerMultiTask ('copier', 'Copier les fichiers.', function () {
    var kindOf = grunt.util.kindOf;

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

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

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

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

    this.files.forEach (fonction (filePair) {
      isExpandedPair = filePair.orig.expand || faux;

      filePair.src.forEach (fonction (src) {
        if (detectDestType (filePair.dest) === 'répertoire') {
          dest = (isExpandedPair)? filePair.dest: unixifyPath (chemin.join (filePair.dest, src));
        } autre {
          dest = filePair.dest;
        }

        if (grunt.file.isDir (src)) {
          grunt.verbose.writeln ('Création' + dest.cyan);
          grunt.file.mkdir (dest);
          tally.dirs ++;
        } autre {
          grunt.verbose.writeln ('Copie' + src.cyan + '->' + dest.cyan);
          grunt.file.copy (src, dest, copyOptions);
          tally.files ++;
        }
      });
    });
Patrick
la source
Savez-vous que la réponse acceptée est incorrecte? Voir cette réponse ci-dessous .
David Pärsson

Réponses:

59

Développer vous permet de spécifier si vous souhaitez créer le chemin de destination dans son intégralité (par exemple:) /path/missing1/missing2, ou ne créer le dernier répertoire que lorsque son parent existe ( /path/existing/missing).

Vladimir Georgiev
la source
4
Ah, donc c'est effectivement l'option -p de mkdir. Je l'ai Merci!
Patrick
6
Cette réponse n'est pas correcte. C'est au mieux simplifié.
David Pärsson
3
-1. C'est trompeur - sur la base de cette réponse que j'ai supprimée expand: true, pensant que je n'en avais pas besoin, puis ma version a cessé de fonctionner.
Claudiu
82

Comme il expandfait partie de Grunt, et n'est pas spécifique à grunt-contrib-copy, des informations à ce sujet peuvent être trouvées dans l'API de configuration de fichier de Grunt :

Réglez expandsur truepour activer les options suivantes:

  • cwdToutes les srccorrespondances sont relatives à (mais n'incluent pas) ce chemin.
  • srcMotif (s) à faire correspondre, par rapport au cwd.
  • dest Préfixe du chemin de destination.
  • extRemplacez toute extension existante par cette valeur dans les destchemins générés .
  • extDotUtilisé pour indiquer où se situe la période indiquant l'extension. Peut prendre soit 'first'(l'extension commence après le premier point du nom de fichier) ou 'last'(l'extension commence après le dernier point) et est définie par défaut sur 'first'.
  • flattenSupprimez toutes les parties de chemin des destchemins générés .
  • renameCette fonction est appelée pour chaque srcfichier correspondant (après le renommage et l'aplatissement de l'extension). Le chemin destet le srcchemin correspondant sont transmis et cette fonction doit renvoyer une nouvelle destvaleur. Si le même destest retourné plus d'une fois, chacun srcqui l'a utilisé sera ajouté à un tableau de sources pour cela.

De plus, il semble que destsera toujours considéré comme un répertoire de destination si le paramètre est défini expandsur true.

David Pärsson
la source
Meilleure réponse. Mais cela n'est-il documenté nulle part?
syonip
J'ai trouvé la documentation après avoir cherché une deuxième fois et j'ai mis à jour ma réponse en conséquence.
David Pärsson
J'ai ajouté l'exemple utile fourni dans la doc. C'est plus clair maintenant.
Rémi Becheras