2014-02-18 55 views
32

JavaScript程序可以檢查IDE中的錯誤或使用online web apps,但我正在尋找一種方法來檢測語法錯誤單獨如何才能從命令行檢查JavaScript代碼的語法錯誤?

我試過JSLint和JSHint,看着他們的選擇,但我一直沒能找到一個組合,將排除警告和just shows the syntax errors

如何從命令行檢查JavaScript代碼僅有語法錯誤

+2

然後使用[命令行版本JSLint](https://www.npmjs.org/package/jslint)。 – Quentin

+1

@DanDascalescu比你想要的方式設置驗證規則! http://www.jslint.com/lint.html#options – epascarello

+0

也許是因爲*問題要求我們推薦或找到一個工具,庫或最喜歡的場外資源是堆棧溢出的主題* – DontVoteMeDown

回答

14

的解決方案是使jshint的--verbose選項,它示出了錯誤或警告代碼(例如E020Expected '}' to match '{'W110Mixed double and single quotes),然後用grep僅用於錯誤:

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

如果儘管最終出現了太多的錯誤,但如果出現太多警告和錯誤,退出「消息。您需要設置一個配置文件選項,如maxerr:10000以避免這種情況,這並不理想。 – mynameistechno

+1

@mynameistechno,你可以在命令行調用它時添加--maxerr 10000,因爲答案似乎已經暗示。 –

+1

jshint 2.9.4似乎沒有采用「--maxerr」參數 - 是否被刪除? – erjiang

4

JSHint做你想做的。 http://www.jshint.com/

您可以配置顯示哪些警告或錯誤。

一個例子:

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

1 error 
+0

如何將其配置爲僅顯示*語法錯誤,而不是警告? –

+0

你可以在配置下閱讀這裏。 http://www.jshint.com/docs/ – idmean

+0

或者,這可能更好http://www.jshint.com/docs/options/。 – idmean

24

我用acorn

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

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

安裝經由:npm -g install acorn

+0

'橡子'看起來不適合我:'錯誤:找不到模塊'./_ acorn.js'' – Alex

0

我有類似的問題,但也需要驗證IE8的具體問題,並在html,aspx,ascx和cshtml文件中驗證js代碼。

我已經創建了簡單的開源控制檯工具(基於Microsoft.JScript.Compiler),也許它可以幫助你。 JsParser.Cmd

它使用起來非常簡單,它幫助我在nunit測試中驗證js代碼。

3

任何JavaScript解析器都應該這麼做,acorn @cweise提到的不錯,因爲它速度很快,並且有一個--silent開關。

你也可以使用esvalidate從故宮esprima包: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爲我節省了很多時間。感謝您的建議。 – SomeGuyOnAComputer

0

這裏是一個持續集成方案的答覆。

1-檢查所有具有排除文件夾,子文件夾和文件功能的JavaScript文件。

2-如果出現錯誤,請退出。

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; 
相關問題