Por que gulp.src não gosta de receber uma série de caminhos completos para os arquivos?


94

Estou tentando passar a gulp.src uma série de arquivos com os quais desejo lidar. Esta é a matriz tal como está.

['bower_components/jquery/jquery.js',
 'bower_components/superscrollorama/js/greensock/TweenMax.min.js',
 'bower_components/superscrollorama/jquery.superscrollorama.js' ]

No entanto, estou descobrindo que gulp.src não parece gostar disso e o terceiro elemento não chega ao destino final.

Descobri que tudo funciona bem quando introduzo alguns caracteres curinga como este:

['bower_components/**/jquery.js',
 'bower_components/**/js/greensock/TweenMax.min.js',
 'bower_components/**/jquery.superscrollorama.js' ]

Mas por que? Algo a ver com o modo como o globbing funciona? Eu pesquisei, mas não consigo descobrir.

Talvez esse não seja o propósito pretendido do globbing, mas não faz sentido para mim que funcione assim. Alguém pode lançar alguma luz?

Respostas:


162

Quando você passa uma matriz de caminhos completos, cada arquivo é processado de forma independente. O globbing não sabe onde está a raiz do caminho (na verdade, ele adivinha com base no primeiro glob). Portanto, cada arquivo está enraizado na pasta que contém e o caminho relativo está vazio.

No entanto, existe uma solução fácil. Passe um objeto com a chave basecomo o segundo argumento para gulp.srce tudo terá o caminho relativo correto:

return gulp.src(['bower_components/jquery/jquery.js',
                'bower_components/superscrollorama/js/greensock/TweenMax.min.js',
                'bower_components/superscrollorama/jquery.superscrollorama.js' ],
            {base: 'bower_components/'})
        .pipe(...);

23
Além disso: isso não é mencionado nos documentos do gulp, você precisa clicar nos documentos paraglob-stream descobrir isso.
OverZealous

9
e se os caminhos não tiverem todos a mesma base? Eu tenho uma pergunta semelhante aberta para esse cenário específico: gulp src não lendo os valores da matriz do arquivo json obrigatório
Andre

1
mesma pergunta do meu lado. Tenho duas bases diferentes para a tarefa que preciso executar
Cynthia Sanchez,

4
Provavelmente sempre haverá uma base comum em algum lugar do sistema de arquivos, certo? Mesmo que seja "/". Se o gulp estiver sendo executado a partir da raiz do diretório do seu projeto, você apenas especificará o diretório atual como base e canalize para o diretório atual. gulp.src(mixed, {base: "."}).pipe(doStuff).pipe(dest("."))
números 1311407 de
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.