A tarefa de servidor do Grunt inicia um servidor estático (muito útil ao desenvolver aplicativos de página única) e é configurada assim:
grunt.initConfig({
server: {
port: 3000,
base: './public'
}
});
Posso mantê-lo funcionando usando-o com relógio (deve ser o último, pois bloqueia).
grunt server watch
Para que ele inicie um aplicativo Node, em vez de apenas servir ativos estáticos, eu uso uma tarefa personalizada:
grunt.registerTask('server', 'Start a custom web server', function() {
grunt.log.writeln('Started web server on port 3000');
require('./app.js').listen(3000);
});
Em seguida, exporto-o em app.js assim:
express = require('express');
app = module.exports = express();
....