2014-10-20 20 views
1

考慮以下幾點:browserified文件預計不會通過jshint驗證?

$ cat example.js 
function f() { return 1; } 
exports.F = f; 
$ browserify example.js > exampleBundle.js 
$ jshint --verbose example.js 
$ jshint --verbose exampleBundle.js 
exampleBundle.js: line 1, col 187, Missing semicolon. (W033) 
exampleBundle.js: line 1, col 279, Missing semicolon. (W033) 
exampleBundle.js: line 1, col 301, Missing semicolon. (W033) 
exampleBundle.js: line 1, col 321, Missing semicolon. (W033) 
exampleBundle.js: line 1, col 407, Missing semicolon. (W033) 
exampleBundle.js: line 5, col 15, Missing semicolon. (W033) 

6 errors 
$ 

而且,它的價值,jquery-1.11.1.min.js沒有通過jshint驗證。

此外,我使用browserify的4.2.1版本和jshint的2.5.6:

$ browserify --v 
4.2.1 
$ jshint --v 
jshint v2.5.6 
$ 

最後,如果我修改.jshintrc文件,包括表格(here採取)的聲明:

$ cat .jshintrc 
{ 
    "browserify": true 
} 
$ 

錯誤依然存在。

後的第一個版本(開始)

在我得到一個錯誤後的第一個版本,該選項不支持:

example.js: line 0, col 0, Bad option: 'browserify'. (E001) 

然而,正如有人指出我在2.5.3之前運行了一個jshint版本(特別是2.5.2)。

後(END)的第一個版本

無論不過,問題仍然存在:這個預期?它看起來像browserify正在生成無法通過jshint驗證的代碼。

+1

這很明顯,但我仍然會問。你有正確版本的jshint嗎?鏈接提到版本2.5.3 ... – FredyC 2014-10-20 16:20:01

+0

謝謝。我確實在運行2.5.2,現在我安裝了2.5.6。然而,錯誤仍然存​​在(除了我在第一版文章中提到的'壞選項'消息之外)。 – MightyMouse 2014-10-20 16:43:02

+0

從[substack](https://github.com/substack/node-browserify/issues/157):_運行生成的源jshint確實看起來很愚蠢。如果你想jshint,爲什麼不運行它對原始源文件?_ – 2014-10-20 16:48:17

回答

2

當然生成的JS文件不會通過jshint。

請記住,像jshint這樣的工具的目的是指出您在代碼中可能犯的錯誤。理論上講,強制使用嚴格的JavaScript語法子集有助於防止出錯,並使您的代碼更易於您和其他人在將來理解。

像browserify和縮小工具的輸出不是爲人類消費。 Minifiers故意利用技術上合法的語法,但人爲不友好,以實現最大的字節節省。

考慮:

if (iAmThirsty == true) { 
    drinkBeer(); 
} 

通過重命名和語法變換的組合,minifier可能會變成某事,這就像:

t&&d() 

因爲&&短路,這些做同樣的事情。後者肯定不會通過jshint(或代碼審查),但那並不重要。你寫道東西很容易人類消化,這就是將來會被修改的東西。

你將永遠不會處理輸出;您將始終修改原始源並再次編譯。 Jshint存在以確保您的是高品質。在處理後的輸出上運行它沒有任何意義。

+0

你嘗試過我給的例子嗎? – MightyMouse 2014-10-20 20:43:35

+1

我沒有看到你得到什麼 - 你的例子只是運行jshint對browserify的處理輸出,這對我上面概述的原因沒有意義。 – josh3736 2014-10-20 20:56:13

+0

不,因爲browserify不是最小化器,jshint驗證代碼;我們的瀏覽器運行的代碼。特別是,jshint抱怨的第一個陳述是:拋出分號丟失的新錯誤(「找不到模塊」+ + +「'」)。此外,browserify還使用分號來表示語句結束。換句話說,jshint會拋出一個完全有效的錯誤。 – MightyMouse 2014-10-20 21:33:09