2013-06-16 11 views
5

Mam instalację JSHint z wieloma podzadań (src, lib i test) w Grunt, który działa świetnie. Jednak, ponieważ dopiero zaczynamy używać tej konfiguracji, mamy wiele błędów w naszych wielu plikach źródłowych.Uruchom JSHint dla pojedynczego pliku w Grunt

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

Podczas pracy nad jednym plikiem na raz, czy możliwe jest ponowne napisanie tego pojedynczego pliku?

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

Aktualizacja

Jeden komplikacją jest to, że zadanie zegarek również ma wiele podzadań odpalać różne zadania w oparciu o który jest edytowany typ pliku.

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" ] 
    } 
} 

Powodem tego jest to, że src i lib jednorazowego użytku .jshint podczas test wykorzystuje inny, który określa wszystkie globalnych używane do testów, takich jak twierdzeń. Mogę połączyć src i lib, ale czy mogę przesłonić plik konfiguracyjny JSHint dla test?

+0

w partii (a nawet edytorów tekstu IDE like Sublime Tex t) mieć sposób na podłączenie jshint. Czy to może być lepsze podejście do pojedynczego pliku? – explunit

+0

@explunit - Wielu z nas używa NetBeans i chociaż istnieje [wtyczka JSLint] (http://plugins.netbeans.org/plugin/40893/?show=true), będzie wymagać pracy, aby nauczyć go używania JSHinta i nasze pliki konfiguracyjne '.jshint'. Wolałbym znaleźć rozwiązanie w Grunt, aby dotyczyło wszystkich sytuacji. –

+0

@explunit - Znalazłem [fork, który używa JSHint] (https://github.com/JeClemens/netbeans-jshint), ale nadal chciałbym rozwiązanie Grunt, jeśli istnieje. –

Odpowiedz

4

grunt-contrib-watch-task, stanowi przykład, jak skonfigurować swoje zadania i korzystać z zegarka-zdarzenie dla strzępienia tylko zmienione pliki:

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); 
}); 
+0

Mam zamiar wypróbować to teraz, ponieważ przybliża mnie, ale czy istnieje sposób, aby zastąpić więcej niż ścieżka pliku w przypadku, w oparciu o które wywołano podzadanie zegarka? Zobacz moją edycję, jak konfiguruje się podzadania zegarków i dlaczego. –

+0

oczywiście można uzyskać i ustawić wszystko w swojej konfiguracji. set [grunt.config.get/grunt.config.set] (http://gruntjs.com/api/grunt.config#grunt.config.get) – hereandnow78

+0

Tak, ale muszę zmienić konfigurację w oparciu o które podzadanie zegarka zwolniony, tzn. który plik został poddany edycji. Poszukuję 'src' i' test' w nazwie zmodyfikowanego pliku, który jest dobrze i dobrze, dopóki ktoś nie napisze źródła z "test" w nazwie lub na odwrót. –

0

Ponieważ odpowiedź powyżej nie jest to, czego się spodziewałem lub szukasz I „chciałbym zaoferować tę odpowiedź ...

można wywołać go jak 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)) 
     } 
    ) 
Powiązane problemy