Gruntjs用grunt-nodemon,watch和jshint

我试图用这3个插件运行GruntJS ,以便它可以监视更改,并首先:lint该文件,然后重新加载快速服务器。 我的问题与下面的configuration是,如果jshint lint文件, nodemon不运行,反之亦然。

// Gruntfile.js // our wrapper function (required by grunt and its plugins) // all configuration goes inside this function module.exports = function(grunt) { // =========================================================================== // CONFIGURE GRUNT =========================================================== // =========================================================================== grunt.initConfig({ // get the configuration info from package.json ---------------------------- // this way we can use things like name and version (pkg.name) pkg: grunt.file.readJSON('package.json'), // all of our configuration will go here // configure jshint to validate js files ----------------------------------- jshint: { options: { reporter: require('jshint-stylish') // use jshint-stylish to make our errors look and read good }, // when this task is run, lint the Gruntfile and all js files in src build: ['Grunfile.js', 'routes/*.js'] }, watch: { // for scripts, run jshint and uglify scripts: { files: 'routes/*.js', tasks: ['jshint'] } }, concurrent: { dev: { tasks: ['jshint', 'nodemon', 'watch'], options: { logConcurrentOutput: true } } }, // concurrent nodemon: { dev: { script: './server.js' } } // nodemon }); // =========================================================================== // LOAD GRUNT PLUGINS ======================================================== // =========================================================================== // we can only load these if they are in our package.json // make sure you have run npm install so our app can find these grunt.loadNpmTasks('grunt-contrib-jshint'); grunt.loadNpmTasks('grunt-contrib-watch'); grunt.loadNpmTasks('grunt-nodemon'); grunt.registerTask('default', '', function() { var taskList = [ 'jshint', 'nodemon', 'watch' ]; grunt.task.run(taskList); }); }; 

编辑(澄清):

我第一次运行gruntjshint lint这些文件,那么nodemon start和jshint就不会再起作用了。

输出:

 grunt Running "default" task Running "jshint:build" (jshint) task ✔︎ No problems Running "nodemon:dev" (nodemon) task [nodemon] v1.2.1 [nodemon] to restart at any time, enter `rs` [nodemon] watching: *.* [nodemon] starting `node ./server.js` Express server listening on port 3000 

尝试运行它作为一项function任务:

 grunt.registerTask('default', '', function() { var taskList = [ 'jshint', 'nodemon', 'watch' ]; grunt.task.run(taskList); }); 

编辑:另一种方法,我已经实现了自动重新运行任务的目标,包括快递,使用grunt-express-server应用到您的设置:

 module.exports = function(grunt) { grunt.initConfig({ pkg: grunt.file.readJSON("package.json"), watch: { express: { files: ['routes/*.js'], tasks: ['jshint', 'express:dev'], options: { spawn: false } } }, express: { dev: { options: { script: 'app.js', } } }, jshint: { options: { node: true }, all: { src: ['routes/*.js'] } } }); grunt.loadNpmTasks('grunt-express-server'); grunt.loadNpmTasks('grunt-contrib-jshint'); grunt.registerTask('default', '', function() { var taskList = [ 'jshint', 'express:dev', 'watch' ]; grunt.task.run(taskList); }); }; 

是一个非常愚蠢的错误。 我没有加载grunt-concurrent,只是安装了grunt-concurrent,并将其添加到Kelz的function,现在它的工作:)。 谢谢你们。

最终代码:

 // Gruntfile.js // our wrapper function (required by grunt and its plugins) // all configuration goes inside this function module.exports = function(grunt) { // =========================================================================== // CONFIGURE GRUNT =========================================================== // =========================================================================== grunt.initConfig({ // get the configuration info from package.json ---------------------------- // this way we can use things like name and version (pkg.name) pkg: grunt.file.readJSON('package.json'), // all of our configuration will go here // configure jshint to validate js files ----------------------------------- jshint: { options: { reporter: require('jshint-stylish') // use jshint-stylish to make our errors look and read good }, // when this task is run, lint the Gruntfile and all js files in src build: ['Grunfile.js', 'routes/*.js'] }, watch: { // for scripts, run jshint and uglify scripts: { files: 'routes/*.js', tasks: ['jshint'] } }, // watch nodemon: { dev: { script: './server.js' } }, // nodemon concurrent: { dev: { tasks: ['jshint', 'nodemon', 'watch'], options: { logConcurrentOutput: true } } } // concurrent }); // =========================================================================== // LOAD GRUNT PLUGINS ======================================================== // =========================================================================== // we can only load these if they are in our package.json // make sure you have run npm install so our app can find these grunt.loadNpmTasks('grunt-concurrent'); grunt.loadNpmTasks('grunt-contrib-jshint'); grunt.loadNpmTasks('grunt-contrib-watch'); grunt.loadNpmTasks('grunt-nodemon'); grunt.registerTask('default', '', function() { var taskList = [ 'concurrent', 'jshint', 'nodemon', 'watch' ]; grunt.task.run(taskList); }); };