同时运行`watch`&与Grunt一起使用`nodemon`

时间:2014-01-31 11:46:21

标签: node.js gruntjs watch jshint nodemon

我刚刚开始使用Grunt,并希望每次修改文件时使用grunt-contrib-watch [GitHub page]来运行我的JavaScript(使用grunt-contrib-jshint [GitHub page])并且同时使用grunt-nodemon [GitHub page]运行grunt-concurrent [GitHub page]

据我所知(我显然没有)我的Gruntfile应该:

  1. 默认情况下运行concurrent
  2. concurrent运行watch
  3. 每次修改文件时,
  4. watch都会运行jshint
  5. Gruntfile.js

    module.exports = function (grunt) {
        grunt.initConfig({
            concurrent: {
                dev: [
                    'watch'
                ],
                options: {
                    logConcurrentOutput: true
                }
            },
            jshint: {
                server: [
                    '**/*.js',
                    '!node_modules/**/*.js'
                ],
                options: {
                    node: true
                }
            },
            watch: {
                all: [
                    '**/*/.js',
                    '!node_modules/**/*.js'
                ],
                tasks: [
                    'jshint'
                ]
            }
        });
    
        grunt.loadNpmTasks('grunt-concurrent');
        grunt.loadNpmTasks('grunt-contrib-jshint');
        grunt.loadNpmTasks('grunt-contrib-watch');
    
        grunt.registerTask('default', [
            'concurrent:dev'/*,
            'jshint',
            'watch'*/
        ]);
    };
    
        grunt.loadNpmTasks('grunt-concurrent');
        grunt.loadNpmTasks('grunt-contrib-jshint');
        grunt.loadNpmTasks('grunt-contrib-watch');
    
        grunt.registerTask('default', [
            'concurrent:dev'
        ]);
    };
    

    N.B。我还没有将grunt-nodemon添加到混音中。

    看起来concurrent正在运行watch但是当我修改文件时,它显示jshint未运行。我当然不会在终端中获得任何输出(我认为logConcurrentOutput: true会这样做。)

    以下是我在终端中获得的输出:

    Running "concurrent:dev" (concurrent) task
    Running "watch" task
    Waiting...    
    
    
    Done, without errors.
    

    我还想在第一次运行jshint任务时(以及修改文件时)运行default

    任何人都可以了解我出错的地方吗?

    谢谢!

3 个答案:

答案 0 :(得分:6)

如果没有找到“观看”的文件,watch任务将退出;根据{{​​3}}。

要轻松告诉watch查看与jshint任务相同的文件,我使用Grunt的模板引擎来引用与Array任务相同的jshint个文件。< / p>

然后我将jshint添加到要运行的并发任务列表中,以便最初运行它并修改文件(使用watch)。

这是我的工作Gruntfile

module.exports = function (grunt) {
    grunt.initConfig({
        concurrent: {
            dev: [
                'jshint',
                'watch'
            ],
            options: {
                logConcurrentOutput: true
            }
        },
        jshint: {
            server: [
                '**/*.js',
                '!node_modules/**/*.js'
            ],
            options: {
                node: true
            }
        },
        watch: {
            files: '<%= jshint.server %>',
            tasks: [
                'jshint'
            ]
        }
    });

    grunt.loadNpmTasks('grunt-concurrent');
    grunt.loadNpmTasks('grunt-contrib-jshint');
    grunt.loadNpmTasks('grunt-contrib-watch');

    grunt.registerTask('default', [
        'concurrent'
    ]);
};

答案 1 :(得分:1)

如果您运行的是Express服务器,则可以使用grunt-express-server。该文档对JSHINT和LiveReload + Watch / Regarde的使用提供了很好的指导。

grunt.initConfig({
    jshint: {
      all: ['Gruntfile.js', 'public/javascripts/*.js', 'test/**/*.js']
    },
    watch: {
      express: {
        files: ['**/*.js', '**/*.ejs'],
        tasks: ['jshint', 'express:dev'],
        options: {
          spawn: false
        }
      }
    },
    express: {
      dev: {
        options: {
          script: './app.js'
        }
      }
    }
  });

  grunt.loadNpmTasks('grunt-contrib-jshint');
  grunt.loadNpmTasks('grunt-express-server');
  grunt.loadNpmTasks('grunt-contrib-watch');

  // Default task(s).
  grunt.registerTask('server', [ 'express:dev', 'watch' ]);
});

答案 2 :(得分:0)

Jonathon你需要检查你的globbing模式是否真正匹配任何文件。由于该问题的链接建议您可以尝试nonull选项。我还建议用标志--debug进行咕噜声,这样你就可以看到更多关于幕后发生的事情。

This is a working Gruntfile启动节点服务器,监视更改和livereload。它使用grunt-express插件。