При написании большого 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операторов или каких-либо других пользовательских вызовов журнала. Таким образом, ваш репозиторий гарантированно свободен от отладочных остатков!