6

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

据我了解(我显然不了解)我的 Gruntfile 应该:

  1. concurrent默认运行
  2. concurrent运行watch
  3. watchjshint每次修改文件时运行

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'
    ]);
};

注意我还没有添加grunt-nodemon到组合中。

它看起来concurrent正在运行watch,但是当我修改文件时,它似乎jshint没有运行。我当然没有在终端中得到任何输出(我认为logConcurrentOutput: true这样做)。

这是我在终端中得到的输出:

Running "concurrent:dev" (concurrent) task
Running "watch" task
Waiting...    


Done, without errors.

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

谁能阐明我哪里出错了?

谢谢!

4

3 回答 3

6

watch如果没有找到要“监视”的文件,则任务退出;根据这个问题

为了方便地告诉watch我观看与任务相同的文件,jshint我使用 Grunt 的模板引擎来引用与任务相同Array的文件jshint

然后我将其添加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'
    ]);
};
于 2014-01-31T12:51:35.927 回答
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' ]);
});
于 2014-04-07T21:03:56.903 回答
0

Jonathon,您需要检查您的 globbing 模式是否实际匹配任何文件。正如问题的链接所暗示的那样,您可以尝试该nonull选项。我还建议使用标志运行 grunt,--debug以便您可以看到更多幕后发生的事情。

这是一个运行中的 Gruntfile,它启动一个节点服务器,监视更改和 livereloads。它使用grunt-express插件。

于 2014-01-31T13:46:56.593 回答