Estou tentando preparar um projeto de um diretório ativo para um servidor (mesma máquina). Usando o seguinte código:
gulp.src([
'index.php',
'css/**',
'js/**',
'src/**',
])
.pipe(gulp.dest('/var/www/'));
Eu esperaria ver todos os arquivos copiados. No entanto, isso simplifica a estrutura do diretório - todos os diretórios são copiados, mas todos os arquivos são colocados na raiz/var/www
Gulp parece ser uma ótima ferramenta de construção, mas copiar itens deve ser um processo simples, com certeza?
deployment
gulp
M1ke
fonte
fonte
/var/www/
? Você poderia tentar{css,js,src}/**/*
Respostas:
O seguinte funciona sem nivelar a estrutura da pasta:
A
'**/*'
é a parte importante. Essa expressão é uma glob, que é uma poderosa ferramenta de seleção de arquivos. Por exemplo, para copiar apenas arquivos .js, use:'input/folder/**/*.js'
fonte
.pipe(gulp.dest('output/folder'));
{base:"."}
método.base
padrão é "pasta", conforme indicado nesta resposta. Em outras palavras, a base começa onde o padrão glob começa. Isso me ajudou a entender onde meus arquivos terminariam e também é por isso que você não precisa**/*
dogulp.dest
parâmetro Gulp pega tudo na glob e coloca na pasta dest com a mesma estrutura.Acontece que, para copiar uma estrutura de diretórios completa, é
gulp
necessário fornecer uma base para o seugulp.src()
método.Portanto,
gulp.src( [ files ], { "base" : "." })
pode ser usado na estrutura acima para copiar todos os diretórios recursivamente.Se, como eu, você pode esquecer isso, tente:
fonte
base
ainda estiver confuso, dê uma olhada em stackoverflow.com/a/35848322/11912, que explica muito bem.Então - a solução de fornecer uma base funciona, pois todos os caminhos têm o mesmo caminho base. Mas se você deseja fornecer caminhos base diferentes, isso ainda não funcionará.
Uma maneira de resolver esse problema foi tornar o início do caminho relativo. Para o seu caso:
A razão pela qual isso funciona é que o Gulp define a base como o final do primeiro bloco explícito - o líder * faz com que ele defina a base no cwd (que é o resultado que todos queremos!)
Isso só funciona se você puder garantir que a estrutura da pasta não tenha certos caminhos que podem corresponder duas vezes. Por exemplo, se você tivesse
randomjs/
o mesmo níveljs
, acabaria correspondendo a ambos.Esta é a única maneira que encontrei para incluí-las como parte de uma função gulp.src de nível superior. Provavelmente seria simples criar um plugin / função que pudesse separar cada um desses globs, para que você pudesse especificar o diretório base para eles.
fonte
However it flattens the dir structure - all directories are copied but every file is placed in the root /var/www
, e foi assim que encontrei sua pergunta - eu estava procurando uma solução de como copiar recursivamente com diferentes caminhos de base. Essencialmente, esta solução funciona para o seu caso sem ter que especificar uma base padrão, mas também para um caso caminho multi-base, enquanto você pode garantir que a estrela principal corresponde nada :)'assets/subdir/*fonts/*'
para copiar o diretório das fontes.Se você deseja copiar todo o conteúdo de uma pasta recursivamente para outra pasta, é possível executar o seguinte comando do Windows no gulp:
A
/y
opção no final é suprimir a mensagem de confirmação de substituição.No Linux, você pode executar o seguinte comando no gulp:
você pode usar o gulp-exec ou o plugin gulp-run para executar comandos do sistema a partir do gulp.
Links Relacionados:
uso de xcopy
gulp-exec e gulp-run
fonte