¿Qué hace la opción "expandir" en grunt-contrib-copy? Todos los ejemplos lo usan, pero los documentos no dicen nada sobre lo que hace.

100
  1. Aquí está el archivo README y ejemplos: https://github.com/gruntjs/grunt-contrib-copy/blob/master/README.md .
  2. Aquí está la parte relevante del código (que aparentemente no puedo entender) de https://github.com/gruntjs/grunt-contrib-copy/blob/master/tasks/copy.js :
module.exports = function (gruñido) {
  'uso estricto';

  var ruta = require ('ruta');

  grunt.registerMultiTask ('copiar', 'Copiar archivos.', function () {
    var kindOf = grunt.util.kindOf;

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

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

    grunt.verbose.writeflags (opciones, 'Opciones');

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

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

      filePair.src.forEach (function (src) {
        if (detectDestType (filePair.dest) === 'directorio') {
          dest = (isExpandedPair)? filePair.dest: unixifyPath (ruta.join (filePair.dest, src));
        } más {
          dest = filePair.dest;
        }

        if (grunt.file.isDir (src)) {
          grunt.verbose.writeln ('Creando' + dest.cyan);
          grunt.file.mkdir (dest);
          tally.dirs ++;
        } más {
          grunt.verbose.writeln ('Copiando' + src.cyan + '->' + dest.cyan);
          grunt.file.copy (src, dest, copyOptions);
          tally.files ++;
        }
      });
    });
Patricio
fuente
¿Sabe que la respuesta aceptada es incorrecta? Vea esta respuesta a continuación .
David Pärsson

Respuestas:

59

Expandir le permite especificar si desea crear la ruta de destino en su totalidad (por ejemplo:) /path/missing1/missing2, o solo crear el último directorio cuando exista su padre ( /path/existing/missing).

Vladimir Georgiev
fuente
4
Ah, entonces es efectivamente la opción -p para mkdir. ¡Gracias!
Patrick
6
Esta respuesta no es correcta. En el mejor de los casos, está simplificado.
David Pärsson
3
-1. Esto es engañoso: basándome en esta respuesta que eliminé expand: true, pensando que no la necesitaba, y luego mi compilación dejó de funcionar.
Claudiu
82

Dado que expandes parte de Grunt, y no es específico de grunt-contrib-copy, se puede encontrar información al respecto en la API de configuración de archivos de Grunt :

Configure expanden truepara habilitar las siguientes opciones:

  • cwdTodas las srccoincidencias son relativas (pero no incluyen) esta ruta.
  • srcPatrón (s) a coincidir, en relación con el cwd.
  • dest Prefijo de ruta de destino.
  • extReemplace cualquier extensión existente con este valor en las destrutas generadas .
  • extDotSe utiliza para indicar dónde se encuentra el período que indica la extensión. Puede tomar 'first'(la extensión comienza después del primer período en el nombre del archivo) o 'last'(la extensión comienza después del último período) y se establece de forma predeterminada en 'first'.
  • flattenElimine todas las partes de la ruta de las destrutas generadas .
  • renameEsta función se llama para cada srcarchivo coincidente (después de cambiar el nombre de la extensión y acoplarla). La ruta desty la srcruta coincidente se pasan y esta función debe devolver un nuevo destvalor. Si destse devuelve el mismo más de una vez, cada uno de los srcque lo utilizó se agregará a una matriz de fuentes para él.

Además, parece destque siempre se considerará un directorio de destino si se configura expanden true.

David Pärsson
fuente
Mejor respuesta. ¿Pero esto no está documentado en ninguna parte?
Syonip
De hecho, encontré la documentación después de buscar por segunda vez y actualicé mi respuesta en consecuencia.
David Pärsson
Agregué el ejemplo útil proporcionado en el documento. Está más claro ahora.
Rémi Becheras