uglify serve nodejs grunt example clean gruntjs grunt-contrib-watch

gruntjs - serve - Cómo ejecutar dos tareas de reloj gruñido simultáneamente



install grunt (7)

¿Es posible ejecutar dos tareas de vigilancia simultáneamente?

Entiendo que puedo tener cualquier cantidad de tareas que quiera dentro de la configuración del reloj y solo lanzar el reloj gruñido y las verá a todas, como esta

... watch: { A: { files: "js/dev/**/*.coffee", tasks: ["coffee", "requirejs"] }, B: { files: "js/dev/**/*.coffee", tasks: ["coffee"] }, C: { files: "js/dev/**/*.html", tasks: ["copy"] } } ...

... pero no necesito esto Solo quiero tener un conjunto diferente de tareas para desarrollo y producción. Como puede adivinar, la única diferencia entre A (producción) y B (desarrollo) es la minificación y la concatenación. No necesito iniciar tareas A y B al mismo tiempo.

Primero vine con esta idea

grunt.registerTask("prod", ["watch:A", "watch:C"]); grunt.registerTask("dev", ["watch:B", "watch:C"]);

Pero esto no funcionó. Solo ver tareas primero funciona ( C nunca funciona). ¿Es posible hacer lo que quiero?


Concurrent funciona bien para mí

concurrent: { options: { logConcurrentOutput: true }, set1: [''watch:html'', ''watch:styles''], }, grunt.registerTask(''default'', ''watch''); grunt.registerTask(''htmlcss'', [''concurrent:set1'']);


He encontrado usando obras grunt-concurrent :

concurrent: { options: { logConcurrentOutput: true }, prod: { tasks: ["watch:A", "watch:C"] }, dev: { tasks: ["watch:B", "watch:C"] } }

Entonces:

grunt.registerTask("prod", ["concurrent:prod"]); grunt.registerTask("dev", ["concurrent:dev"]);


La mejor y única solución de trabajo está allí: https://npmjs.org/package/grunt-focus Agregue este complemento y luego:

focus: { sources: { include: [''js'', ''html'', ''css'', ''grunt''] }, testu: { include: [''js'', ''html'', ''css'', ''testu'', ''grunt''] }, testi: { include: [''js'', ''html'', ''css'', ''testu'', ''testi'', ''grunt''] } }, watch: { js: { files: paths.js, tasks: [''jshint''], options: { livereload: true } }, html: { files: paths.html, options: { livereload: true } }, css: { files: paths.css, tasks: [''csslint''], options: { livereload: true } }, testu: { files: [''test/**/*.js'', ''test/**/*.css''], tasks: [''mochaTest''], options: {} }, testi: { files: [''test/**/*.js'', ''test/**/*.css''], tasks: [''exec:cleanTestDB'', ''protractor_webdriver'', ''protractor''], options: {} }, grunt: { files: [''Gruntfile.js'', ''server/config/env/*.js''], options: { reload: true } } }

Luego usas focus: sources o focus: testu como tu conveniencia.

JM.


Sé que esto no responde directamente a la pregunta, pero mi solución ahora es utilizar Gulp en lugar de Grunt. Con Gulp usted codifica y no solo configura. Entonces eres más libre de hacer lo que quieras.

JM.


Simplemente cambie la dirección del puerto y el puerto livereload. Por ej. si el puerto es 9000 cámbielo a 8000 y vuelva a cargar desde 35729 a 36729


grunt-concurrent o grunt-focus son buenas soluciones, pero ambas rompen la funcionalidad de livereload .

Mi solución a esto es componer la configuración del reloj de forma dinámica, con la suposición de que no ejecutará ambas configuraciones al mismo tiempo.

Puedes hacer algo como esto

grunt.config.merge({ watch: { options: { livereload: true }, C: { files: "js/dev/**/*.html", tasks: ["copy"] } } }); grunt.registerTask(''watch-forProd'', function () { grunt.config.merge({ watch: { A: { files: "js/dev/**/*.coffee", tasks: ["coffee", "requirejs"] } } }); grunt.task.run(''watch''); }); grunt.registerTask(''watch-forDev'', function () { grunt.config.merge({ watch: { B: { files: "js/dev/**/*.coffee", tasks: ["coffee"] } } }); grunt.task.run(''watch''); }); grunt.registerTask("prod", ["watch-forProd"]); grunt.registerTask("dev", ["watch-forDev"]);


EDIT: concurrent ahora tiene una opción logConcurrentOutput ! Más información aquí: https://github.com/sindresorhus/grunt-concurrent#logconcurrentoutput .

Mirar es una tarea extrañamente concurrente pero que bloquea, por lo que debe ser creativo para que funcione la funcionalidad multitarea.

Concurrente pierde todos los resultados de las tareas de vigilancia, lo que no es ideal.

Intente escribir dinámicamente el objeto de configuración en una tarea personalizada:

grunt.registerTask(''watch:test'', function() { // Configuration for watch:test tasks. var config = { options: { interrupt: true }, unit: { files: [ ''test/unit/**/*.spec.coffee'' ], tasks: [''karma:unit''] }, integration: { files: [ ''test/integration/**/*.rb'', ''.tmp/scripts/**/*.js'' ], tasks: [''exec:rspec''] } }; grunt.config(''watch'', config); grunt.task.run(''watch''); });