La siguiente tarea de Gulpjs funciona bien al editar archivos en la coincidencia global:
// watch task.
gulp.task('watch', ['build'], function () {
gulp.watch(src + '/js/**/*.js', ['scripts']);
gulp.watch(src + '/img//**/*.{jpg,jpeg,png,gif}', ['copy:images']);
gulp.watch(src + '/less/*.less', ['styles']);
gulp.watch(src + '/templates/**/*.{swig,json}', ['html']);
});
// build task.
gulp.task('build', ['clean'], function() {
return gulp.start('copy', 'scripts', 'less', 'htmlmin');
});
Sin embargo, no funciona (no se activa) para archivos nuevos o eliminados. ¿Se me escapa algo?
EDITAR : incluso usando el complemento grunt-watch parece que no funciona:
gulp.task('scripts', function() {
return streamqueue(
{ objectMode: true },
gulp.src([
vendor + '/jquery/dist/jquery.min.js',
vendor + '/bootstrap/dist/js/bootstrap.min.js'
]),
gulp.src([
src + '/js/**/*.js'
]).pipe(plugins.uglify())
)
.pipe(plugins.concat(pkg.name + '.min.js'))
.pipe(gulp.dest(dest + '/js/'));
});
gulp.task('watch', ['build'], function () {
plugins.watch({glob: src + '/js/**/*.js'}, function () {
gulp.start('scripts');
});
});
EDITAR : Resuelto, fue este problema . Parece que los globos que comienzan con ./
(ese era el valor de src
) no funcionan en ATM.
javascript
node.js
gulp
gremo
fuente
fuente
gulp-watch
, por ejemplo,gulp.watch('js/**/*.js', {cwd: src}, ['scripts']);
Respuestas:
Editar: aparentemente
gulp.watch
funciona con archivos nuevos o eliminados ahora. No fue así cuando se hizo la pregunta.El resto de mi respuesta sigue en pie:
gulp-watch
generalmente es una mejor solución porque le permite realizar acciones específicas solo en los archivos que se han modificado, mientras quegulp.watch
solo le permite ejecutar tareas completas. Para un proyecto de un tamaño razonable, esto se volverá demasiado lento para ser útil.No te falta nada.
gulp.watch
no funciona con archivos nuevos o eliminados. Es una solución simple diseñada para proyectos simples.Para ver archivos que puedan buscar archivos nuevos, use el
gulp-watch
complemento , que es mucho más potente. El uso se ve así:Personalmente, recomiendo la primera opción. Esto permite procesos por archivo mucho más rápidos. Funciona muy bien durante el desarrollo con livereload siempre que no esté concatenando ningún archivo.
Puede concluir sus transmisiones utilizando mi
lazypipe
biblioteca o simplemente utilizando una función ystream-combiner
así:ACTUALIZACIÓN 15 de octubre de 2014
Como señaló @pkyeck a continuación, aparentemente la versión 1.0 de
gulp-watch
cambió ligeramente el formato, por lo que los ejemplos anteriores ahora deberían ser:y
fuente
Ambos
gulp.watch()
yrequire('gulp-watch')()
se activarán para archivos nuevos / eliminados, sin embargo, no si utiliza directorios absolutos. En mis pruebas no utilicé"./"
para directorios relativos BTW.Sin embargo, ambos no se activarán si se eliminan directorios completos.
fuente
./
a su paso - en realidad parece como una mala práctica - github.com/floatdrop/gulp-watch/issues/1gulp-watch
funcionar correctamente para activar nuevos archivos o archivos eliminados. ¡No hay necesidad!gulp.watch
Haz esto. Al eliminar todo./
de las rutas se resolvieron los problemas. Increíble.Si
src
es una ruta absoluta (empezando por/
), su código no detectará archivos nuevos o eliminados. Sin embargo, todavía hay una manera:En vez de:
escribir:
y funcionará!
fuente
{ cwd: src }
pista fue mi solución. ¡Muchas gracias!watch
{cwd:'./'}
y deje el patrón de globo como está para que se convierta engulp.watch('src/js/**/*.js', {cwd: './'}, ['scripts']);
Los globos deben tener un directorio base separado especificado y esa ubicación base no debe especificarse en el globo mismo.
Si es así
lib/*.js
, se verá debajo del directorio de trabajo actual, que esprocess.cwd()
Gulp usa Gaze para mirar archivos y en el documento API de Gulp vemos que podemos pasar opciones específicas de Gaze a la función de vigilancia:
gulp.watch(glob[, opts], tasks)
Ahora en el documento de Gaze podemos encontrar que el directorio de trabajo actual (directorio base de glob) es la
cwd
opción.Lo que nos lleva a la respuesta de alexk:
gulp.watch('js/**/*.js', {cwd: src}, ['scripts']);
fuente
Sé que esta es una pregunta anterior, pero pensé en lanzar la solución que se me ocurrió. Ninguno de los complementos de Gulp que encontré me notificaría de archivos nuevos o renombrados. Así que terminé envolviendo el monóculo en una función conveniente.
Aquí hay un ejemplo de cómo se usa esa función:
Debo señalar que gulpStart también es una función de conveniencia que hice.
Y aquí está el módulo de reloj real.
Bastante simple, ¿eh? Todo se puede encontrar en mi kit de inicio de Gulp: https://github.com/chrisdavies/gulp_starter_kit
fuente
utils
carpeta)Es importante tener en cuenta que parece que gulp.watch solo informa los archivos modificados y eliminados en Windows, pero escucha los archivos nuevos y eliminados de forma predeterminada en OSX:
https://github.com/gulpjs/gulp/issues/675
fuente
Debería usar 'gulp-watch' para archivos nuevos / renombrados / eliminados en lugar de gulp.watch
fuente