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 ++;
        }
      });
    });

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).


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.


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
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.