node.js - node - Use gulp para seleccionar y mover directorios y sus archivos
glob pattern (2)
Debe incluir la opción base
en src, que conservará la estructura de archivos de la manera que desee:
var filesToMove = [
''./_locales/**/*.*'',
''./icons/**/*.*'',
''./src/page_action/**/*.*'',
''./manifest.json''
];
gulp.task(''move'',[''clean''], function(){
// the base option sets the relative root for the set of files,
// preserving the folder structure
gulp.src(filesToMove, { base: ''./'' })
.pipe(gulp.dest(''dist''));
});
Además, es probable que tenga problemas en el futuro si tiene todos estos archivos fuente en la raíz de su proyecto.
Si puede, le recomendaría que use una sola carpeta src/
y mueva todos sus archivos específicos de la aplicación allí. Esto hace que el mantenimiento sea más fácil de seguir y evita que sus archivos específicos de compilación se mezclen con los archivos específicos de su aplicación.
Si hace esto, simplemente reemplace todas las ocurrencias de ./
con src/
en el ejemplo anterior.
Actualmente estoy usando gulp para llamar a un script bash que limpia mi directorio dist/
y mueve los archivos apropiados al directorio limpio. Me gustaría que esto se haga con gulp porque no estoy seguro de que el script funcione en un sistema de archivos no * nix.
Hasta ahora, estoy usando el módulo gulp-clean para limpiar el directorio dist/
pero cuando intento mover los directorios requeridos y sus archivos a la carpeta dist, los directorios están vacíos.
var gulp = require(''gulp''),
clean = require(''gulp-clean'');
gulp.task(''clean'', function(){
return gulp.src([''dist/*''], {read:false})
.pipe(clean());
});
gulp.task(''move'',[''clean''], function(){
gulp.src([''_locales'', ''icons'', ''src/page_action'', ''manifest.json''])
.pipe(gulp.dest(''dist''));
});
gulp.task(''dist'', [''move'']);
llamar a gulp dist
da como resultado que el directorio dist/
se rellene con los directorios correctos, pero están todos vacíos
$ ls dist/*
dist/manifest.json
dist/_locales:
dist/icons:
dist/page_action:
¿Cómo copio los directorios y sus contenidos en la carpeta dist/
?
La pregunta original se dirige solo a directorios (también conocidos como carpetas) en su gulp.src
, es decir, gulp.src([''_locales'', ...
en este ejemplo, _locales
es el nombre de un directorio .
La respuesta aceptada usa un patrón gulp.src
en su gulp.src
para apuntar a los archivos en cualquier lugar de esos directorios, es decir, gulp.src([''./_locales/**/*.*'', ...
, (observe los asteriscos dobles , y los asteriscos filename.extension ). La respuesta aceptada funciona ...
... pero la respuesta aceptada solo enfatiza la opción base
:
Necesita incluir la opción
base
para src ...
Experimenté y encontré:
Estrictamente hablando, no es necesario usar la opción
base
para lograr lo que el OP pidió: "... y mueve los archivos apropiados al directorio limpio". La opciónbase
hecho conserva la estructura de carpeta + archivo (como se describe en la respuesta aceptada), pero la opciónbase
no es suficiente para mover los archivos como se solicitó OP. Preservar la estructura de carpeta + archivo es probablemente lo que el OP espera , por lo que la respuesta aceptada es buena, pero ...Solo para reiterar lo que mueve los archivos, son los patrones
glob
:Doble asterisco (
.../**/...
) busca recursivamente en todas las subcarpetas y subcarpetas ''subcarpetas'', etc.Filename.extension asterisks (
.../*.*
) Busca archivos de todos los nombres y todas las extensiones . ¡Así que creo que esta parte merece el mayor énfasis!
La respuesta aceptada cambia algo más; agrega un prefijo de
./
a cada argumento de ruta pasado agulp.src
. Creo que eso es innecesario / redundante; si no hay./
, (como en la pregunta OP), las rutas se resuelven en relación con el directorio actual, lo que da como resultado el mismo comportamiento . Pero tal vez es una buena práctica ser explícito con./
Avísame si me equivoco ...