Cosa fa l'opzione "espandi" in grunt-contrib-copy? Tutti gli esempi lo usano ma i documenti non dicono nulla su ciò che fa


100
  1. Ecco il README e gli esempi: https://github.com/gruntjs/grunt-contrib-copy/blob/master/README.md .
  2. Ecco la parte rilevante del codice (che apparentemente non riesco a capire) da https://github.com/gruntjs/grunt-contrib-copy/blob/master/tasks/copy.js :
module.exports = function (grunt) {
  'usa rigoroso';

  var path = require ('percorso');

  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 (opzioni, "Opzioni");

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

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

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

        if (grunt.file.isDir (src)) {
          grunt.verbose.writeln ("Creazione" + dest.cyan);
          grunt.file.mkdir (dest);
          tally.dirs ++;
        } altro {
          grunt.verbose.writeln ('Copia' + src.cyan + '->' + dest.cyan);
          grunt.file.copy (src, dest, copyOptions);
          tally.files ++;
        }
      });
    });

Sei consapevole che la risposta accettata non è corretta? Vedi questa risposta di seguito .
David Pärsson

Risposte:


59

Espandi consente di specificare se si desidera creare il percorso di destinazione per intero (ad esempio:) /path/missing1/missing2o creare solo l'ultima directory quando esiste il suo genitore ( /path/existing/missing).


4
Ah, quindi è effettivamente l'opzione -p di mkdir. Capito grazie!
Patrick

6
Questa risposta non è corretta. Nella migliore delle ipotesi è semplificato.
David Pärsson

3
-1. Questo è fuorviante: in base a questa risposta ho rimosso expand: true, immaginando di non averne bisogno e quindi la mia build ha smesso di funzionare.
Claudiu

82

Poiché expandfa parte di Grunt e non è specifico per grunt-contrib-copy, le informazioni a riguardo possono essere trovate nell'API di configurazione dei file di Grunt :

Impostare expandsu trueper abilitare le seguenti opzioni:

  • cwdTutte le srccorrispondenze sono relative a (ma non includono) questo percorso.
  • srcPattern / i da abbinare, rispetto al file cwd.
  • dest Prefisso del percorso di destinazione.
  • extSostituisci qualsiasi estensione esistente con questo valore nei destpercorsi generati .
  • extDotUtilizzato per indicare dove si trova il periodo che indica l'estensione. Può richiedere 'first'(l'estensione inizia dopo il primo punto nel nome del file) o 'last'(l'estensione inizia dopo l'ultimo punto) ed è impostata di default su 'first'.
  • flattenRimuovi tutte le parti del percorso dai destpercorsi generati .
  • renameQuesta funzione viene chiamata per ogni srcfile corrispondente , (dopo la ridenominazione e l'appiattimento dell'estensione). Il percorso deste corrispondente srcvengono passati e questa funzione deve restituire un nuovo destvalore. Se lo stesso destviene restituito più di una volta, ciascuno srcche lo ha utilizzato verrà aggiunto a un array di sorgenti per esso.

Inoltre sembra che destsarà sempre considerata una directory di destinazione se impostata expandsu true.


Risposta migliore. Ma questo non è documentato da nessuna parte?
syonip

In realtà ho trovato la documentazione dopo aver guardato una seconda volta e ho aggiornato la mia risposta di conseguenza.
David Pärsson

Ho aggiunto l'utile esempio fornito nel doc. Adesso è più chiaro.
Rémi Becheras
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.