[英]Google Closure Compiler 100% typed
如何讓我的應用程序在谷歌閉包編譯器方面100%打字?
我已經使用jsdoc注釋標記了所有內容。 甚至可以獲得100? 我在64.6%
有可能達到100%。 我自己的項目是100%打字的。 閉包編譯器可以輸出有關未知類型的表達式的警告。 遺憾的是,沒有命令行選項來啟用此功能。 您必須修改源代碼才能啟用它:
下載當前來源:
git clone https://code.google.com/p/closure-compiler/
編輯src / com / google / javascript / jscomp / CompilerOptions.java並將reportUnknownTypes = CheckLevel.OFF
行更改為reportUnknownTypes = CheckLevel.WARNING
只需在根目錄中調用ant
即可編譯閉包編譯器。 修改后的compiler.jar現在位於構建目錄中。
當您在腳本上使用此修改后的編譯器時,它會針對編譯器無法確定類型的所有表達式發出大量警告。 當您在代碼中修復所有這些警告時,它將100%鍵入。
編譯器有一個標志,您可以設置該標志以使未知類型輸出警告。
--jscomp_warning=reportUnknownTypes
您還需要提高警告級別。
--warning_level=VERBOSE
我嘗試編譯goog.net.XhrIo作為測試:
goog.require('goog.Uri.QueryData');
goog.require('goog.debug.ErrorHandler');
goog.require('goog.net.XhrIo');
goog.net.XhrIo;
當我編譯這個時,我有這個結果:
20-nov-2010 1:12:21 com.google.javascript.jscomp.LoggerErrorManager printSummary
WARNING: 0 error(s), 1 warning(s), 91,5% typed
JSC_USELESS_CODE. Suspicious code. This code lacks side-effects. Is there a bug? at test.js line 5 : 0
似乎封閉庫本身並非100%打字,我認為目標不是達到100%。 Javascript不是靜態類型語言。 Closure試圖將靜態類型語言的一些好處帶入javascript。 這很好。 但這並不意味着你必須承擔這種語言的負擔。
我試圖編譯一個空文件,結果是90.4%。 我認為這意味着具有所有原始函數的base.js不是100%類型的。 所以我做了一些實驗,發現當我還在所有局部變量上輸入類型信息時,百分比會上升。 我認為沒有必要在所有局部變量上放置類型信息。 我的意思是想象一下:
/** @type {number} */
var i = 0;
for(i = 0; i < 10; i++) {
// do something
}
這不是使用閉包編譯器進行編譯的目標。 事實證明,編譯base.js不會導致100%。 我試着在我的開發中將這個數字保持在85%到95%之間。 根據您的時間,編程風格和您正在處理的應用程序可能會有所不同。 最好的指導方針是在整個應用程序開發過程中盡量保持百分比不變,無論是60%還是90%。 只需根據需要進行盡可能多的打字,以使您熟悉自己的代碼。
所有學分都歸@kayahr所有,但時間過去了。 我想提供一個基於舊版本編譯器的答案的更新。
您需要使用強制類型檢查重新編譯源代碼。 為此:
下載源git clone https://code.google.com/p/closure-compiler/
並轉到closure-compiler
編輯src/com/google/javascript/jscomp/CompilerOptions.java
並將checkTypes
設置為true
。您還可以使用各種編譯和優化變量。
通過運行ant
編譯代碼
但請注意, tightenTypes
是實驗性的並且非常破碎。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.