O que a opção “expandir” faz em grunt-contrib-copy? Todos os exemplos o usam, mas os documentos não dizem nada sobre o que ele faz

100
  1. Aqui está o README e exemplos: https://github.com/gruntjs/grunt-contrib-copy/blob/master/README.md .
  2. Aqui está a parte relevante do código (que aparentemente não consigo entender) de https://github.com/gruntjs/grunt-contrib-copy/blob/master/tasks/copy.js :
module.exports = function (grunt) {
  'use estrito';

  var path = require ('path');

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

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

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

    grunt.verbose.writeflags (opções, 'Opções');

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

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

      filePair.src.forEach (function (src) {
        if (detectDestType (filePair.dest) === 'diretório') {
          dest = (isExpandedPair)? filePair.dest: unixifyPath (path.join (filePair.dest, src));
        } outro {
          dest = filePair.dest;
        }

        if (grunt.file.isDir (src)) {
          grunt.verbose.writeln ('Criando' + dest.cyan);
          grunt.file.mkdir (dest);
          tally.dirs ++;
        } outro {
          grunt.verbose.writeln ('Copiando' + src.cyan + '->' + dest.cyan);
          grunt.file.copy (src, dest, copyOptions);
          tally.files ++;
        }
      });
    });
Patrick
fonte
Você está ciente de que a resposta aceita está incorreta? Veja esta resposta abaixo .
David Pärsson

Respostas:

59

Expand permite que você especifique se deseja criar o caminho de destino completo (por exemplo:) /path/missing1/missing2ou apenas criar o último diretório quando seu pai existir ( /path/existing/missing).

Vladimir Georgiev
fonte
4
Ah, então é efetivamente a opção -p para mkdir. Entendi, obrigado!
Patrick
6
Esta resposta não está correta. Na melhor das hipóteses, é simplificado.
David Pärsson
3
-1. Isso é enganoso - com base nessa resposta, removi expand: true, imaginando que não precisava dela, e minha construção parou de funcionar.
Claudiu
82

Como expandfaz parte do Grunt e não é específico para grunt-contrib-copy, as informações sobre ele podem ser encontradas na API de configuração de arquivo do Grunt :

Defina expandcomo truepara ativar as seguintes opções:

  • cwdTodas as srccorrespondências são relativas (mas não incluem) este caminho.
  • srcPadrão (s) para corresponder, em relação ao cwd.
  • dest Prefixo do caminho de destino.
  • extSubstitua qualquer extensão existente por este valor nos destcaminhos gerados .
  • extDotUsado para indicar onde o período que indica a extensão está localizado. Pode ser 'first'(a extensão começa após o primeiro ponto no nome do arquivo) ou 'last'(a extensão começa depois do último ponto) e é definida por padrão como 'first'.
  • flattenRemova todas as partes do caminho dos destcaminhos gerados .
  • renameEsta função é chamada para cada srcarquivo correspondido (após renomear e nivelar a extensão). O caminho deste correspondido srcsão passados ​​e esta função deve retornar um novo destvalor. Se o mesmo destfor retornado mais de uma vez, cada um srcque o usou será adicionado a uma matriz de fontes para ele.

Além disso, parece que destsempre será considerado um diretório de destino se definido expandcomo true.

David Pärsson
fonte
Melhor resposta. Mas isso não está documentado em nenhum lugar?
Syonip
Na verdade, encontrei a documentação depois de olhar uma segunda vez e atualizei minha resposta de acordo.
David Pärsson,
Eu adicionei o exemplo útil fornecido no documento. Está mais claro agora.
Rémi Becheras