Estoy tratando de organizar un proyecto desde un directorio de trabajo a un servidor (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 de directorios: todos los directorios se copian pero cada archivo se coloca en la raíz/var/www
Gulp parece una gran herramienta de compilación, ¿pero copiar elementos debería ser un proceso simple?
deployment
gulp
M1ke
fuente
fuente
/var/www/
? Puedes intentarlo{css,js,src}/**/*
Respuestas:
Lo siguiente funciona sin aplanar la estructura de carpetas:
La
'**/*'
es la parte importante. Esa expresión es un globo que es una poderosa herramienta de selección de archivos. Por ejemplo, para copiar solo archivos .js use:'input/folder/**/*.js'
fuente
.pipe(gulp.dest('output/folder'));
{base:"."}
método.base
valor predeterminado es "carpeta" como se indica en esta respuesta. En otras palabras, la base comienza donde comienza el patrón glob. Esto me ayudó a comprender dónde terminarían mis archivos y también es la razón por la que no necesita**/*
elgulp.dest
parámetro. Gulp toma todo en el globo y lo coloca en la carpeta dest con la misma estructura.Resulta que para copiar una estructura de directorio completa
gulp
debe proporcionarse una base para sugulp.src()
método.Por
gulp.src( [ files ], { "base" : "." })
lo tanto, se puede utilizar en la estructura anterior para copiar todos los directorios de forma recursiva.Si, como yo, puede olvidar esto, intente:
fuente
base
aún lo confunde, eche un vistazo a stackoverflow.com/a/35848322/11912, que hace un gran trabajo al explicarlo.Entonces, la solución de proporcionar una base funciona dado que todas las rutas tienen la misma ruta base. Pero si desea proporcionar diferentes rutas base, esto aún no funcionará.
Una forma de resolver este problema fue haciendo que el comienzo del camino sea relativo. Para su caso:
La razón por la que esto funciona es que Gulp establece la base para que sea el final del primer fragmento explícito: el * principal hace que establezca la base en el cwd (¡que es el resultado que todos queremos!)
Esto solo funciona si puede asegurarse de que la estructura de su carpeta no tenga ciertas rutas que puedan coincidir dos veces. Por ejemplo, si tuviera
randomjs/
el mismo nivel quejs
, terminaría haciendo coincidir ambos.Esta es la única forma en que he encontrado que los incluye como parte de una función gulp.src de nivel superior. Sin embargo, probablemente sería simple crear un complemento / función que pudiera separar cada uno de esos globos para poder especificar el directorio base para ellos.
fuente
However it flattens the dir structure - all directories are copied but every file is placed in the root /var/www
, y así es como encontré su pregunta: estaba buscando una solución para copiar de forma recursiva con diferentes rutas base. Esencialmente, esta solución funciona para su caso sin tener que especificar una base predeterminada, sino también para un caso de ruta de múltiples bases, siempre que pueda asegurarse de que la estrella principal no coincida con nada :)'assets/subdir/*fonts/*'
copiar el directorio de fuentes.Si desea copiar todo el contenido de una carpeta de forma recursiva en otra carpeta, puede ejecutar el siguiente comando de Windows desde gulp:
La
/y
opción al final es suprimir el mensaje de confirmación de sobrescritura.En Linux, puede ejecutar el siguiente comando desde gulp:
puede usar el complemento gulp-exec o gulp-run para ejecutar comandos del sistema desde gulp.
Enlaces relacionados:
uso de xcopy
gulp-exec y gulp-run
fuente