javascript gulp gulp-watch

javascript - Ejecutando tarea existente con gulp-watch



gulp structure (4)

Tengo algunas tareas ya definidas en gulpfile.js y quiero usar el complemento gulp-watch (para ejecutar tareas en nuevos archivos). Mi pregunta es, porque no pude encontrar nada, ¿puedo ejecutar mis tareas existentes mientras ejecuto la función de ver (desde el complemento)?

var gulp = require(''gulp''), watch = require(''gulp-watch''), ...; gulp.task(''lint'', function () { return gulp.src(path.scripts) .pipe(jshint()) .pipe(jshint.reporter(stylish)); }); gulp.task(''watch'', function () { watch({ glob: ''app/**/*.js'' }); // Run ''lint'' task for those files });

Porque no quiero incluir la tarea watch() en todas las tareas que tengo. Me gustaría tener solo 1 tarea: reloj, que combinará todos los "relojes".

----- EDITAR ---- (ya que probablemente no entendí mi punto):

Necesito ejecutar la tarea desde dentro de la tarea de gulp(''watch'') . por ejemplo:

como lo hice con gulp.watch :

gulp.task(''watch'', function () { gulp.watch(''files'', [''task1'', ''task2'']); });

Necesito hacer lo mismo pero con el plugin gulp-watch Watch, algo como (sé que no funcionaría):

var watch = require(''gulp-watch''); gulp.task(''watch'', function () { watch({ glob: ''files'' }, [''task1'', ''task2'']); });


Lo más probable es que desee ejecutar tareas específicas relacionadas con los archivos que está viendo:

gulp.task(''watch'',[''lint''], function () { gulp.watch(''app/**/*.js'' , [''lint'']); });

También puede usar la parte [''lint''] para ejecutar cualquier tarea requerida cuando se llama la primera llamada, o utilizar las tareas para ejecutar async con

gulp.task(''default'', [''lint'',''watch''])


Simplemente puede llamar a una tarea, que luego incluye ambas tareas

gulp.task(''default'', [''lint'',''watch''])

así que aquí solo llamarías ''trago''


También me he encontrado con el problema de querer usar gulp-watch (no gulp.watch), necesito usar el formulario de devolución de llamada y tener problemas para encontrar una forma adecuada de ejecutar una tarea en la devolución de llamada.

Mi caso de uso fue que quería ver todos los archivos de stylus, pero solo procesar el archivo de stylus principal que incluye todos los demás. Las versiones más recientes de gulp-watch pueden solucionar este problema, pero tengo problemas con 4.3.x, así que me quedo con 4.2.5.

  • gulp.run está en desuso, así que no quiero usar eso.
  • gulp.start funciona bien, pero también es desaconsejado por el autor de Gulp, contra.
  • El complemento de secuencia de ejecución funciona bien y le permite definir un orden de ejecución, pero es un hack autoproclamado: https://www.npmjs.com/package/run-sequence
  • Contra sugiere escribir funciones antiguas y llamarlas. Esta es una idea nueva para mí, pero creo que el siguiente ejemplo capta la idea. https://github.com/gulpjs/gulp/issues/505

Elige tu opción.

var gulp = require(''gulp''), watch = require(''gulp-watch''), // not gulp.watch runSequence = require(''run-sequence''); // plain old js function var runStylus = function() { return gulp.src(''index.styl'') .pipe(...) // process single file } gulp.task(''stylus'', runStylus); gulp.task(''watch'', function() { // watch many files watch(''*.styl'', function() { runSequence(''stylus''); OR gulp.start(''stylus''); OR runStylus(); }); });

Todo esto funciona para mí sin advertencias, pero todavía no estoy seguro de obtener la devolución de llamada "listo" de la versión 4.2.x de gulp-watch.


gulp.task(''watch'', function() { watch(files, function() { gulp.run([''task1'', ''task2'']); }); });

trabaja bien, excepto una advertencia