2014-02-18 10 views
32

JavaScript-Programme können auf Fehler in IDEs überprüft werden oder online web apps verwenden, aber ich suche nach einer Möglichkeit, Syntaxfehler zu erkennen allein.Wie kann ich JavaScript-Code auf Syntaxfehler NUR über die Befehlszeile überprüfen?

Ich habe versucht JSLint und JSHint und schaute auf ihre Optionen, aber ich konnte nicht eine Kombination finden, die Warnungen und just shows the syntax errors ausschließen würde.

Wie überprüfe ich JavaScript-Code nur für Syntaxfehler von der Befehlszeile?

+2

Verwenden Sie dann die [Befehlszeilenversion von JSLint] (https://www.npmjs.org/package/jslint). – Quentin

+1

@DanDascalescu Dann richten Sie die Validierungsregeln so ein, wie Sie möchten! http://www.jslint.com/lint.html#options – epascarello

+0

Vielleicht ist es, weil * Fragen, die uns bitten, ein Werkzeug, eine Bibliothek oder eine Lieblings-Offsite-Ressource zu empfehlen oder zu finden, sind off-topic für Stack Overflow * – DontVoteMeDown

Antwort

14

Die Lösung ist jshint der --verbose Option zu aktivieren, die den Fehler oder Warncode (zB E020 für Expected '}' to match '{' oder W110 für Mixed double and single quotes) zeigt, dann auf Fehler grep nur:

jshint --verbose test.js | grep -E E[0-9]+.$ 
+2

Wenn es zu viele Warnungen und Fehler gibt, obwohl Sie am Ende eine "zu viele Fehler" bekommen, beende "Nachricht. Sie müssen eine Konfigurationsdateioption wie maxerr: 10000 festlegen, um dies zu vermeiden, was nicht ideal ist. – mynameistechno

+1

@mynameistechno, Sie könnten auch --maxerr 10000 hinzufügen, wenn Sie es von der Befehlszeile aus aufrufen, wie die Antwort bereits zu implizieren scheint. –

+1

jshint 2.9.4 scheint nicht ein "--maxerr" Argument zu nehmen - wurde es entfernt? – erjiang

4

JSHint macht, was Sie wollen. http://www.jshint.com/

Sie können konfigurieren, welche Warnungen oder Fehler angezeigt werden sollen.

Ein Beispiel:

$ jshint myfile.js 
myfile.js: line 10, col 39, Octal literals are not allowed in strict mode. 

1 error 
+0

Wie konfiguriere ich es, um * nur * Syntaxfehler anzuzeigen, keine Warnungen? –

+0

Sie können hier unter Konfiguration nachlesen. http://www.jshint.com/docs/ – idmean

+0

Oder vielleicht ist das noch besser http://www.jshint.com/docs/options/. – idmean

24

ich benutze acorn:

$ acorn --silent tests/files/js-error.js; echo $? 
Unexpected token (1:14) 
1 

$ acorn --silent tests/files/js-ok.js; echo $? 
0 

Installieren über: npm -g install acorn.

+0

'Eichel' funktioniert nicht für mich:' Fehler: Modul nicht gefunden './_ acorn.js'' – Alex

0

Ich hatte das ähnliche Problem, aber auch benötigt, um IE8 spezifische Probleme zu validieren und JS-Code in HTML, ASPX, Ascx und Cshtml-Dateien zu validieren.

Ich habe einfache Open-Source-Konsolen-Tool (basierend auf Microsoft.JScript.Compiler) erstellt, vielleicht kann es Ihnen helfen. JsParser.Cmd

Es ist sehr einfach zu bedienen und es hilft mir, Js-Code in Nunit Tests zu validieren.

3

Jeder JavaScript-Parser sollte tun, acorn erwähnt von @cweise ist nett, weil es schnell ist und einen --silent Schalter hat.

Sie könnten auch esvalidate vom npm esprima Paket verwenden: http://ariya.ofilabs.com/2012/10/javascript-validator-with-esprima.html

$ npm install -g esprima 
$ esvalidate js-file-with-errors.js 
js-file-with-errors.js:1: Invalid left-hand side in assignment 
+0

esvalidate ersparte mir viel Zeit. Danke für den Vorschlag. – SomeGuyOnAComputer

0

Hier ist eine Antwort auf eine kontinuierliche Integration-Szenario.

1 - Überprüft alle JavaScript-Dateien mit Ausschluss von Ordner-, Unterordner- und Dateifunktionen.

2- Beenden, wenn ein Fehler vorliegt.

esvalidate --version || npm install -g esprima; 
find ./ -not \(-path ./exclude_folder_1 -prune \) -not \(-path ./exclude/sub_folder -prune \) -not \(-path ./exclude/sub_folder_2 -prune \) ! -name exclude_specified_file.js -name \*.js -exec esvalidate '{}' \; | grep -v "No syntax errors detected" && echo "Javascript Syntax error(s) detected" && exit 1;