deployment copia - ¿Cómo copio directorios recursivamente con gulp?




todos archivo (5)

Lo siguiente funciona sin aplanar la estructura de la carpeta:

gulp.src(['input/folder/**/*']).pipe(gulp.dest('output/folder'));

El '**/*' es la parte importante. Esa expresión es un glob que es una poderosa herramienta de selección de archivos. Por ejemplo, para copiar solo archivos .js, use: 'input/folder/**/*.js'

Estoy intentando organizar un proyecto de un directorio de trabajo a un servidor (la misma máquina). Usando el siguiente código:

gulp.src([
    'index.php',
    'css/**',
    'js/**',
    'src/**',
])
.pipe(gulp.dest('/var/www/'));

Esperaría ver todos los archivos copiados. Sin embargo, aplana la estructura del directorio: todos los directorios se copian, pero cada archivo se ubica en la raíz /var/www

Gulp parece una gran herramienta de compilación, pero copiar elementos debería ser un proceso simple, ¿no?


Resulta que para copiar una estructura de directorio completa, gulp debe proporcionarse con una base para su método gulp.src() .

Entonces gulp.src( [ files ], { "base" : "." }) Se puede usar en la estructura anterior para copiar todos los directorios recursivamente.

Si, como yo, puede olvidarse de esto, intente:

gulp.copy=function(src,dest){
    return gulp.src(src, {base:"."})
        .pipe(gulp.dest(dest));
};

Si desea copiar todo el contenido de una carpeta recursivamente en otra carpeta, puede ejecutar el siguiente comando de Windows desde gulp:

xcopy /path/to/srcfolder /path/to/destfolder /s /e /y

La opción /y al final es para suprimir el mensaje de confirmación de sobrescritura.

En Linux, puede ejecutar el siguiente comando desde gulp:

cp -R /path/to/srcfolder /path/to/destfolder

puede usar el complemento gulp-exec o gulp-run para ejecutar comandos del sistema desde gulp.

Enlaces relacionados:

  1. uso de xcopy

  2. gulp-exec y gulp-run


Entonces, la solución de proporcionar una base funciona dado que todas las rutas tienen la misma ruta base. Pero si desea proporcionar rutas base diferentes, esto aún no funcionará.

Una forma en que resolví este problema fue relacionando el comienzo de la ruta. Para su caso:

gulp.src([
    'index.php',
    '*css/**/*',
    '*js/**/*',
    '*src/**/*',
])
.pipe(gulp.dest('/var/www/'));

La razón por la que esto funciona es porque Gulp establece la base para ser el final del primer fragmento explícito: el * leading hace que establezca la base en el cwd (¡que es el resultado que todos queremos!)

Esto solo funciona si puede asegurarse de que su estructura de carpetas no tenga ciertas rutas que podrían coincidir dos veces. Por ejemplo, si tuviera randomjs/ en el mismo nivel que js , terminaría emparejando ambos.

Esta es la única forma que he encontrado para incluir estos como parte de una función gulp.src de alto nivel. Sin embargo, probablemente sería sencillo crear un complemento / función que pudiera separar cada uno de esos componentes para que pueda especificar el directorio base para ellos.


Esto parece funcionar:

gulp.src([
    baseDir + '/**',                              // Include all
    '!' + baseDir + '/excl1{,/**}',               // Exclude excl1 dir
    '!' + baseDir + '/excl2/**/!(.gitignore)',    // Exclude excl2 dir, except .gitignore
], { dot: true });

Excluir un solo archivo de la coincidencia global fue complicado porque no hay ejemplos similares en documentos de minimatch.

https://github.com/isaacs/minimatch

"Si el patrón comienza con un carácter ! Entonces se niega".





deployment gulp