2009-06-25 21 views
4

我試圖改造/修復大量舊版網頁代碼,不幸的是,它大部分都是格式不正確的JavaScript。我正在尋找批處理/可腳本化的實用程序,它可以修復在可執行語句結尾處缺少simicolons的JavaScript。什麼是一個很好的獨立JavaScript格式化程序來修復丟失的分號?

我已經嘗試過Rhino的beautify-cl.js腳本,但是不會添加分號。另外,我試過JSTidy,認爲我可以修改它爲可腳本化,但它會刪除所有評論。考慮到我們有類似2000-3000的文件,任何解決方案都必須是可編寫腳本的。

以下主題進行了引用,但沒有一個解決方案足以因各種原因: Javascript Beautifier - 不處理分號 Best source code formatter for Javascript? - 未編寫腳本

任何想法/解決方案?提前致謝。

+0

你嘗試http://www.jslint.com/?這不是一個美化,但最好的質量檢查工具。其餘的將是手動工作。 – Gumbo 2009-06-25 17:40:37

+0

是的,找到問題很好。不幸的是,通過3000個文件並在每個可執行行末尾手動添加分號是非常乏味的。許多文件超過50k。 – 2009-06-25 17:44:55

+0

你有什麼特別的理由添加分號(比如使用特殊的JS打包器)?否則,省略分號仍然符合規範。 – Boldewyn 2009-06-25 17:57:13

回答

2

顯然,你需要做,如果你要來縮小部署文件。缺少分號可能是JS文件不能正確縮小的首要原因,所以我理解你的動機。

編寫一段Python(或其他)腳本通過jslint運行該文件,然後使用jslint的輸出來查看哪些行需要分號,然後旋轉js源代碼並添加它們。

我認爲你可以在這裏相當無所畏懼,因爲無論如何JavaScript都會隱式添加分號。


更新:This set of tools may be what you are looking for。 「格式」選項卡提供缺少分號插入。

0

對於插入分號的唯一目的,您不應該擔心對大量遺留代碼進行大量更新。這是「做錯了」的經典案例。

你會如何測試結果? 如何確保沒有「功能」(作爲由缺失分號引起的錯誤的副作用)不會丟失?

你認爲在所有這些文件中添加分號會給你帶來什麼?除了較大的文件(我不敲敲分號的使用)和大量未經測試的代碼更改?

正如gumbo所說,使用jslint。我會在日常工作中編輯它們時使用它。當你編輯這些文件時,你可能會在當時測試文件的變化。這將是瘋狂插入半決賽的最理想時間。

另外,如果您很重視維持2000-3000傳統的JavaScript文件活着的支持,你有大得多的問題,而不是半冒號

1

如果您使用的JavaScript Utlity V2在http://jsutility.pjoneil.net並使用格式化功能,它會自動替換丟失的分號。

此外,如果您使用壓縮函數,它也將替換缺少的分號,以便壓縮不會導致任何錯誤。

2

我已經找到了贏球的組合js-beautify和谷歌的Closure Linter

說明的 js-beautify
# legacy.js is your poorly formatted JavaScript file, and will be modified in-place 
js-beautify -s 2 -n -b end-expand -x -r legacy.js && fixjsstyle legacy.js 

選項:

  • -s 2:縮進兩個空格
  • -n:確保在年底換行符的文件
  • -b end-expand:將{大括號放在該行的末尾,但總是給它們自己的行賦予}大括號。
  • -x:UNESCAPE \xNN在字符串
  • -r轉義字符:使就地

fixjsstyle,它安裝與關閉短絨套件的變化,使得在默認情況下,發生的變化。

此流水線保留評論(!),縮小一切(主要)我喜歡什麼,在適當的地方添加分號,甚至在可行的情況下將雙引號更改爲單引號。兩個命令都可以給出一個文件列表(例如,**/*.js),而不是一個。

要在Mac OS X上安裝所需的軟件包:

npm install -g js-beautify 
brew install closure-linter 
相關問題