start servidor produccion nodejs node node.js gruntjs watch spawn

node.js - servidor - nodemon npm start



Una tarea similar a Nodemon en Grunt: ejecutar el proceso de nodo y mirar (3)

Editar: grunt-nodemon

desde que escribí esto, una buena persona desarrolló eso.

Estaba teniendo problemas para usar grunt.util.spawn para iniciar nuevos procesos. Se ejecutarían, pero no me devolverían ningún resultado. Quizás puedas descubrir lo que no pude en estos documentos. http://gruntjs.com/api/grunt.util#grunt.util.spawn

Dos problemas que veo con lo que tienes:

  • Creo que grunt.registerTask () tiene que tomar tres argumentos cuando usa una función de devolución de llamada para ejecutar su tarea.
  • No creo que pueda llamar al node server.js una y otra vez cada vez que cambie un archivo. Funcionará la primera vez, para que realmente funcione tendrá que administrar el servidor como un proceso secundario, matando y reiniciando en los cambios de archivos posteriores.

Para los argumentos de registerTask intente esto, solo para ver si puede hacer que algo funcione en su implementación actual.

http://gruntjs.com/api/grunt.task#grunt.task.registertask

Toma (taskName, description, taskFunction) forma:

grunt.registerTask(''start'', ''My start task description'', function() { grunt.util.spawn({ cmd: ''node'', args: [''server.js''] }); grunt.task.run(''watch''); });

Eso al menos podría hacer que su watch ejecute el node server.js la primera vez que cambia un archivo.

Esto es lo que haría en su lugar.

O solo usa nodemon $ nodemon server.js como es

o...

Lea la fuente y use grunt-develop

Está administrando el servidor como un proceso secundario, podría ser lo que estás buscando.

o...

Obtener gruñido
npm install grunt-shell --save-dev

Y úsala para ejecutar nodemon por ti:

module.exports = function(grunt) { // Project configuration. grunt.initConfig({ serverFile: ''server.js'', shell: { nodemon: { command: ''nodemon <%= serverFile %>'', options: { stdout: true, stderr: true } } }, watch: { /* nothing to do in watch anymore */ } }); grunt.loadNpmTasks(''grunt-contrib-watch''); grunt.loadNpmTasks(''grunt-shell''); grunt.registerTask(''default'', ''shell:nodemon''); };

$ grunt shell:nodemon

Yo sinceramente espero que eso ayude. ¡Buena suerte!

Siento que me estoy perdiendo algo.

Esto es lo que quiero lograr:

Tener una tarea server.js que ejecuta mi server.js y ejecuta la tarea watch en paralelo. Me parece que esta es precisamente una de las tareas por las que se diseñó el ronco, pero no puedo lograr esta configuración.

Entre otros, he leído esto: ejecutar la aplicación Nodo a través de Grunt pero todavía no puedo hacerlo.

Aquí está mi Gruntfile.js:

module.exports = function(grunt) { // Project configuration. grunt.initConfig({ watch: { scripts: { files: [''*.js''], tasks: [''start''], options: { nospawn: true } } } }); grunt.loadNpmTasks(''grunt-contrib-watch''); grunt.registerTask(''start'', function() { grunt.util.spawn({ cmd: ''node'', args: [''server.js''] }); grunt.task.run(''watch''); }); grunt.registerTask(''default'', ''start''); };

Tengo "grunt-contrib-watch": "~0.3.1" que debería ser una versión más alta que [email protected] como en la publicación mencionada anteriormente.

Si pudiera ayudarme a lograr la configuración adecuada, estaría extremadamente agradecido. Pero más en general, no entiendo por qué no hay un paquete y una tarea de grunt-contrib-nodemon-like ya que tengo la sensación de que sería otra gran razón para usar grunt (¡que realmente me gusta como herramienta!)

Gracias


Hola, también me encontré con este problema y aquí está mi solución (basada en la respuesta de nackjicholson). Esto usa grunt-nodemon en un proceso generado . Así que puedo:

  • Recargar nodejs
  • Esté atento a los cambios a, por ejemplo, archivos .less
  • Obtener salida de ambas tareas

    grunt.loadNpmTasks(''grunt-nodemon''); grunt.initConfig({ nodemon: { dev: { options: { file: ''server.js'', nodeArgs: [''--debug''], env: { PORT: ''8282'' } } } }, }); grunt.registerTask(''server'', function (target) { // Running nodejs in a different process and displaying output on the main console var nodemon = grunt.util.spawn({ cmd: ''grunt'', grunt: true, args: ''nodemon'' }); nodemon.stdout.pipe(process.stdout); nodemon.stderr.pipe(process.stderr); // here you can run other tasks e.g. // grunt.task.run([ ''watch'' ]); });


Use grunt-concurrent

El problema es que las tareas como watch y nodemon nunca terminarán, por lo que ronco nunca las alcanzará. Necesita generar un nuevo proceso.

Puedes hacer esto fácilmente usando grunt-concurrent:

https://github.com/sindresorhus/grunt-concurrent

Por ejemplo:

module.exports = function(grunt) { grunt.initConfig({ ... concurrent: { dev: { tasks: [''nodemon'', ''watch''], options: { logConcurrentOutput: true } } } }); };

Los dos ahora correrán felizmente uno al lado del otro.