mac help descargar cli gulp gulp-watch

help - Gulp task pipeline only concat si los archivos de origen han cambiado



install gulp mac (3)

El plugin gulp-newer debería hacer el truco.

gulp.task(''scripts'', function() { return gulp.src(''src/**/*.js'') .pipe(newer(''app.js'')) .pipe(concat(''app.js'')) .pipe(gulp.dest(''build/'')); });

Tengo una tarea tramposa que genera archivos JS concatenados. Estoy usando un reloj para detectar cambios en todos los archivos del proyecto y me gustaría que la tarea concat solo vuelva a concatenar los archivos si los archivos fuente han cambiado desde la última ejecución.

nota: podría usar comandos de observación más específicos, pero en mi caso de producción real estamos generando múltiples archivos JS concatenados a partir de múltiples combinaciones de archivos JS de origen, por lo que crear relojes y tareas para cada uno de estos es mucho más complejo.

Algo como esto:

gulp.task(''scripts'', function() { return gulp.src(''src/**/*.js'') .pipe(cache(''scripts'')) // If no changed files in pipeline, exit pipeline, // else add in all src files again .pipe(concat(''app.js'')) .pipe(gulp.dest(''build/'')); });

Pensé en usar un lazypipe para los dos últimos pasos, así que solo ejecuto el concat y dest si hay archivos, pero no sé cómo:

  • Ejecutar una condición según si aún quedan archivos en la interconexión (después de la caché ()
  • Devuelve todos los archivos de origen (básicamente vuelve a emitir gulp.src () nuevamente para volver a generar la secuencia)

Sé que podría usar gulp-remember para la segunda parte, pero en mi caso de producción sería mucho más limpio reconstruir la transmisión si es posible.

¿Alguien hizo esto antes o tiene algún indicio de por dónde empezar?


Aunque esta es una vieja pregunta, pensé que simplemente agregaría la información más reciente. Gulp-newer detecta cambios basados ​​en la marca de tiempo de los archivos, si se elimina un archivo, el gulp-newer no elige este cambio.

debido a esto, estoy buscando bajar la ruta de almacenamiento en caché en lugar de hacerlo más nueva, ya que necesito que se genere mi archivo principal si se elimina o cambia uno de los archivos css, pero trago más reciente no es compatible con todo esto.


El código en la respuesta de moettinger (al momento de escribir) es incorrecto. Aquí está la corriente para regresar:

return gulp.src(''src/**/*.js'') .pipe(newer(''build/app.js'')) .pipe(concat(''app.js'')) .pipe(gulp.dest(''build/''));

Al realizar pruebas en un solo destino, la llamada newer() debe tener una ruta relacionada con el directorio actual (o una ruta absoluta). No puede ser un camino para ser interpretado en contra de la ruta dada en gulp.dest() . Con la llamada newer(''app.js'') la llamada newer siempre causará la ejecución de concat porque no encontrará el archivo.

La documentación da un ejemplo similar.