Статьи

Автоматическое удаление логирования JavaScript

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