5

我在 Grunt 中有多个子任务(src、lib 和 test)的 JSHint 设置,效果很好。但是,由于我们刚刚开始使用此设置,因此我们的许多源文件中存在很多错误。

$ grunt jshint:src
... lots of errors ...

一次处理一个文件时,是否可以重新整理该单个文件?

$ grunt jshint:src:one.js
... only errors from one.js ...

更新

一个复杂的问题是,监视任务还有多个子任务,可以根据编辑的文件类型触发不同的任务。

watch: {
    src: {
        files: [ SRC_DIR + "hgm*.js" ],
        tasks: [ "jshint:src", "test" ]
    },
    lib: {
        files: [ "lib/hgm-test-setup.js", "lib/hgm.loader.js" ],
        tasks: [ "jshint:lib", "test" ]
    },
    test: {
        files: [ "tests/**/*.js" ],
        tasks: [ "jshint:test", "test" ]
    }
}

这样做的原因是srcand libuse one .jshintwhiletest使用不同的一个来指定用于测试的所有全局变量,例如断言。我可以组合srcand lib,但我可以覆盖 JSHint 配置文件test吗?

4

2 回答 2

4

grunt-contrib-watch-task提供了一个示例,如何配置您的任务,并使用 watch-event 仅对更改的文件进行 linting:

grunt.initConfig({
  watch: {
    scripts: {
      files: ['lib/*.js'],
      tasks: ['jshint'],
      options: {
        nospawn: true,
      },
    },
  },
  jshint: {
    all: ['lib/*.js'],
  },
});

// on watch events configure jshint:all to only run on changed file
grunt.event.on('watch', function(action, filepath) {
  grunt.config(['jshint', 'all'], filepath);
});
于 2013-06-16T08:22:16.067 回答
0

由于上面的答案并不是我所期望或寻找的,我想提供这个答案……</p>

你可以像这样调用它grunt jshint-file:src/filename.js

grunt.registerTask('jshint-file',
        'Runs jshint on a file',
        function (filePath) {
            var reportFunc = require('jshint/src/reporters/unix').reporter
            var optionsString = grunt.file.read('.jshintrc')
            var options = JSON.parse(optionsString)
            jshint(grunt.file.read(filePath), options)
            errors = jshint.data().errors.map(function (error) {
                var record = {};
                record.file = filePath;
                record.error = error;
                return record;
            });
            console.log(reportFunc(errors))
        }
    )
于 2017-12-18T16:42:28.967 回答