Google Closure Compiler напечатан на 100%
Как я могу сделать так, чтобы мое приложение было напечатано на 100% относительно компилятора Google Closure?
Я уже отметил все с помощью комментариев jsdoc. Можно ли вообще получить 100? Я на 64,6%
4 ответа
Можно достичь 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 не является статически типизированным языком. Закрытие пытается принести некоторые преимущества статически типизированных языков в 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
является экспериментальным и довольно сломанным.