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.