2013-06-16 10 views
5

Ich habe JSHint Setup mit mehreren Teilaufgaben (Src, Lib, und Test) in Grunt, die gut funktioniert. Da wir jedoch gerade mit dieser Einrichtung beginnen, gibt es eine Los Fehler in unseren vielen Quelldateien.Führen Sie JSHint für eine einzelne Datei in Grunt

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

Wenn Sie gleichzeitig an einer Datei arbeiten, ist es möglich, diese einzelne Datei erneut zu filtern?

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

aktualisieren

Eine Komplikation ist, dass die Uhr Aufgabe auch mehrere Unteraufgaben hat verschiedene Aufgaben abzufeuern basierend auf welche Art von Datei bearbeitet wird.

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

Der Grund dafür ist, dass src und lib Verwendung einer .jshinttest während ein anderes verwendet, die alle globalen Variablen zum Testen wie Assertionen verwendet angibt. Ich kann src und lib kombinieren, aber kann ich die JSHint Konfigurationsdatei für test überschreiben?

+0

viele IDE (und sogar Text-Editoren wie Sublime Tex t) habe eine Möglichkeit jshint zu verbinden. Könnte dies ein besserer Ansatz für einzelne Dateien sein? – explunit

+0

@explunit - Viele von uns verwenden NetBeans, und obwohl es ein [JSLint-Plugin] (http://plugins.netbeans.org/plugin/40893/?show=true) gibt, wird es Arbeit erfordern, es zu lehren, JSHint zu verwenden und unsere '.jshint' Konfigurationsdateien. Ich würde eine Lösung in Grunt bevorzugen, damit sie alle Situationen anspricht. –

+0

@explunit - Ich habe eine [Gabel, die JSHint verwenden] (https://github.com/JeClemens/netbeans-jshint) gefunden, aber ich würde immer noch gerne eine Grunt-Lösung, wenn es eine gibt. –

Antwort

4

die grunt-contrib-watch-task, liefert ein Beispiel, wie Sie Ihre Aufgaben konfigurieren und verwenden, um die Uhr-Ereignis nur geänderte Dateien für Fusseln:

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

Ich werde dies jetzt versuchen, da es mich näher bringt, aber gibt es eine Möglichkeit, mehr als den Dateipfad in dem Ereignis zu überschreiben, basierend darauf, welche Uhr Subtask ausgelöst wurde? Sehen Sie meine Bearbeitung für wie die Uhr Subtasks eingerichtet sind und warum. –

+0

natürlich können Sie alles in Ihrer Konfiguration bekommen und einstellen. set [grunt.config.get/grunt.config.set] (http://gruntjs.com/api/grunt.config#grunt.config.get) – hereandnow78

+0

Ja, aber ich muss die Konfiguration basierend auf welcher Wachteilaufgabe ändern gefeuert, dh welche Datei wurde bearbeitet. Ich suche nach 'src' und' test' im Namen der modifizierten Datei, was alles gut und gut ist, bis jemand eine Quelle mit "test" in den Namen schreibt oder umgekehrt. –

0

Da die Antwort oben nicht wirklich das, was ich erwartet hatte oder auf der Suche nach I d‘diese Antwort bieten ...

Sie können es aufrufen wie 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)) 
     } 
    ) 
Verwandte Themen