Запустите JSHint для одного файла в Grunt
У меня есть настройка JSHint с несколькими подзадачами (src, lib и test) в Grunt, которая прекрасно работает. Однако, поскольку мы только начинаем использовать эту настройку, во многих наших исходных файлах есть много ошибок.
$ 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" ]
}
}
Причина этого в том, что src
а также lib
использовать один .jshint
в то время как test
использует другой, который определяет все глобальные переменные, используемые для тестирования, такие как утверждения. Я могу совместить src
а также lib
, но я могу переопределить файл конфигурации JSHint для test
?
2 ответа
grunt-contrib-watch-task предоставляет пример того, как настроить ваши задачи, и использовать watch-event для привязки только измененных файлов:
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);
});
Поскольку ответ выше не совсем то, что я ожидал или искал, я хотел бы предложить этот ответ...
Вы можете вызвать это как 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))
}
)