При написании большого JavaScript-приложения довольно часто встречаются console.log
и другие отладочные операторы. Очевидно, что в какой-то момент эти посторонние операторы должны быть удалены для рабочей версии или даже когда код должен быть возвращен в исходный репозиторий. Есть много разных способов сделать это, существует новый инструмент под названием, groundskeeper
который может сделать это удаление для вас.
Написанный для Node.js, администратор сайта (GitHub: github.com/Couto/groundskeeper ) создан Luís Couto для обработки удаления журналов, понимая синтаксическое дерево кода и удаляя соответствующие части. Он вообще не основан на регулярном выражении. Groundskeeper анализирует код (с помощью Esprima ) и изменяет синтаксические узлы (с помощью Falafel ), связанные с любой регистрацией. Помимо инструмента командной строки, groundkeeper — это библиотека, готовая для использования в любых других инструментах и системах сборки.
Использовать Groundkeeper очень просто (как объясняется в документации ). Давайте предположим, что у нас есть следующее filter-debug.js
:
function filter(list, age) { var result = []; list.forEach(function (person) { if (person.name && person.age > age) { console.log('including', person.name); result.push(person); } }); return result; }
После установки пакета запустите что-то вроде:
groundskeeper < filter-debug.js > filter.js
даст следующее filter.js
:
function filter(list, age) { var result = []; list.forEach(function (person) { if (person.name && person.age > age) { result.push(person); } }); return result; }
Строка, содержащая console.log
теперь пустую строку. Так как Groundkeeper не удаляет строку, обработанный вывод все равно содержит столько же строк кода, что и исходный.
Как насчет debugger
? Мы знаем, что это утверждение может вызвать некоторые проблемы со старыми веб-браузерами. К счастью, администратор также может избавиться от любых операторов отладчика в коде. На самом деле, вы даже можете уничтожить любой другой пользовательский регистратор приложений, который у вас может быть. Вот фрагмент кода:
debugger var list = filter(customers, 25); RentalApp.Logger.print(JSON.stringify(list, null, 2));
который может быть обработан через:
groundskeeper -n RentalApp.Logger < rental.js
и дать вам оставшийся результат:
var list = filter(customers, 25);
Самым большим преимуществом автоматического удаления является то, что его объединяют с обработчиком Git pre-commit, так что больше не требуется никаких шагов вручную. Это очень похоже на использование трюка проверки синтаксиса . Вот пример такого крючка:
files=$(git diff-index --name-only --diff-filter=ACM HEAD | grep -P '\.js$') for file in $files; do groundskeeper < $file > $file.tmp && mv $file.tmp $file done
Все затронутые * .js-файлы будут обработаны администратором, прежде чем они будут зарегистрированы. Таким образом, ни у одного из них больше не будет заблуждений console.log
, debugger
операторов или каких-либо других пользовательских вызовов журнала. Таким образом, ваш репозиторий гарантированно свободен от отладочных остатков!