Broken links checker for website pages
Broken links checker может быть использован как самостоятельное NodeJS приложение так и npm - зависимость которая может быть подключена к вашему проекту.
В первом случае, для установки потребуется склонировать репозиторий проекта, переключится на последний стабильный тег, установить npm - зависимости и скомпилировать код для выполнения:
$ git clone https://github.com/bem-site/broken-links-checker.git
$ cd broken-links-checker
$ git checkout vx.y.z
$ npm run deps
Во втором случае его достаточно подключить как npm-зависимость:
$ npm install --save bs-broken-links-checker
Работа с инструментом с помощью cli состоит из 3-х шагов:
- Генерация конфигурационного файла для анализа сайта с помощью команды config.
- Запуск анализа сайта с помощью команды run.
- Просмотр сгенерированного
*.html
файла отчета.
- config - генерация конфигурационного файла
- run - запуск инструмента
- version - просмотр версии инструмента
Данная команда предназначена для создания конфигурационного файла в .js
формате.
Необходимость в конфигурационном файле обусловлена 2-мя причинами:
-
- громоздкостью значений части опций.
-
- удобством использования. (отсутствием необходимости перечислять все опции при каждом запуске команды run с помощью cli).
name
- имя конфигурационного файла. Для удобства в качетве значения данного параметра рекомендуется указывать имя хоста web-ресурса для которого будет производиться анализ
Пример использования:
$ node bin/blc config -n my.broken-site.com
Ожидаемый результат вывода в консоль:
INFO acts/config.js: Configuration file: => my.broken-site.com.js has been generated successfully
Примечание: после выполнения данной команды сгенерированный конфигурационный файл my.broken-site.com.js
будет помещен в директорию ./configs
внутри рабочей директории приложения.
Конфигурационый файл представляет из себя обычный NodeJS модуль, экпортирующий объект в котором ключами являются имена опций а значениями - значения опций.
-
url
- адрес сайта, раздела или страницы которые необходимо просканировать на предмет "битых" ссылок. -
logger
- позволяет настроить режим логгирования. Возможные значения для параметра уровня логгированияlevel
: 'verbose', 'debug', 'info', 'warn', 'error'; -
concurrent
- число внутренних ссылок сайта, которые будут проверяться одновременно. Данный параметр для каждого сайта необходимо подбирать опытным путем, так как слишком низкое значение данного параметра увеличит время анализа сайта, а слишком высокое увеличит нагрузку на сервер сайта и может привести к некорректным результатам.
Примечание: данный параметр имеет действие только для внутренних ссылок анализируемого сайта. Внешние ссылки проверяются порциями по 100 штук одновременно.
-
requestHeaders
- данный параметр позволяет задавать произвольные заголовки для запросов к серверу анализируемого сайта. -
requestRetriesAmount
- максимальное число попыток получить ответ от сайта по заданному урлу. -
requestTimeout
- максимальное время ожидания ответа от сервера во время запроса в миллисекундах. -
acceptedSchemes
- разрешенные протоколы ссылок. Все ссылки url-ы которых содержат протоколы отличные от тех, которые указаны в значении данного параметра будут проигнорированы. -
checkExternalUrls
- флаг вклчения проверки внешних ссылок. Если значением данного параметра являетсяfalse
, то будут проанализированы только внутренние ссылки сайта. -
excludeLinkPatterns
- с помощью регулярных выражений или шаблонов строк позволяет указать паттерны урлов, которые будут проигнорированы при анализе сайта. Например, если в анализе сайта не должны участвовать ссылки на разделы сайта/contacts
, то страницы данного раздела можно исключить из анализа путем выставления значением опцииexcludeLinkPatterns
следующего кода:
module.exports = {
...
"excludeLinkPatterns": [
/\/contacts/
]
}
Примеры различных вариантов шаблонов для исключения адресов ссылок:
module.exports = {
...
excludeLinkPatterns: [
/\/contacts/,
http://google.com,
http://my.site.com/foo/*,
*/foo/bar
]
}
Данная команда предназначена для запуска анализа сайта на предмет "битых" ссылок.
-
-c
или--config
: Путь к конфигурационному файлу который будет использован для анализа сайта. Обязательный параметр. -
-u
или--url
: Позволяет переопределить url сайта (раздела, страницы) для анализа, который указан в конфигурационном файле. -
-cc
или--concurrent
: Позволяет переопределить параметрconcurrent
который указан в конфигурационном файле. -
-rra
или--requestRetriesAmount
: Позволяет переопределить параметрrequestRetriesAmount
который указан в конфигурационном файле. -
-rt
или--requestTimeout
: Позволяет переопределить параметрrequestTimeout
который указан в конфигурационном файле. -
-ext
или--checkExternalUrls
: Позволяет переопределить параметрcheckExternalUrls
который указан в конфигурационном файле. -
-m
или--mode
: Данный параметр может принимать 3 возможных значения: 'website' (по умолчанию), 'section' и 'page'.
Примечание:
Иногда бывает удобно просканировать только часть сайта: определенный раздел или страницу. В этом случае использование параметра mode
бывает очень удобно.
В случае если значение параметра mode
равно 'section', то будет просканирован только раздел сайта корневой страницей которого является значение параметра url
. Например, если сайт my.site.com
(конфигурационный файл которого лежит в директории ./configs
под именем my.site.com.js
) имеет следующую структуру:
/
/foo
/foo/foo1
/foo/foo2
/bar
то при вызове команды run
:
$ node bin/blc run -c ./configs/my.site.com.js -u http://my.site.com/foo -m section
будут просканированы страницы: /foo
, /foo1
, /foo2
, а страница '/bar' не будет участвовать а анализе.
В случае если значение параметра mode
равно 'page', то результатом вызова команды run
:
$ node bin/blc run -c ./configs/my.site.com.js -u http://my.site.com/foo -m page
будет анализ ссылок только на странице /foo
.
- Простой вызов с указанием пути к конфигурационному файлу
$ node bin/blc run -c ./configs/my.site.com.js
- Анализ сайта
http://my.another.site.com
c использованием конфигурационного файла для сайтаmy.site.com
.
$ node bin/blc run -c ./configs/my.site.com.js -u http://my.another.site.com
- Использование параметров запросов отличных от указаных в конфигурационном файле.
$ node bin/blc run -c ./configs/my.site.com.js -cc 50 -rt 10000 -rra 20
- Выборочный анализ страницы
/foo/bar
сайтаhttp://my.site.com
.
$ node bin/blc run -c ./configs/my.site.com.js -u http://my.site.com/foo/bar -m page
Результатом работы должен стать вывод в консоль итоговых данных о результатах анализа сайта и ссылок на файлы отчетов которые были сохранены на файловой системе.
Данная команда предназначена для просмотра текущей используемой версии инструмента. Пример использования:
$ node bin/blc version
Ожидаемый результат вывода в консоль (c точностью до значения версии):
INFO cli/cmd-version.js: Application name: => bs-broken-links-checker
INFO cli/cmd-version.js: Application version: => 0.0.1
Пакет устанавливается как обычная npm зависимость
$ npm install --save bs-broken-links-checker
Для инициализации инструмента необходимо создать новый экземпляр класса BrokenLinksChecker
.
var BrokenLinksChecker = require('bs-broken-links-checker').BrokenLinksChecker,
brokenLinksChecker = new BrokenLinksChecker();
Для запуска инструмента следует вызвать метод start
и передать ему в качестве аргумента url сайта на страницах которого необходимо проверить поломанные ссылки, например:
brokenLinksChecker.start('https://ru.bem.info');
Конструктор класса BrokenLinksChecker
в качестве аргумента принимает объект в котором могут находится опции для
более детальной настройки инструмента.
Число запросов для проверки ссылок выполняемых одновременно. Увеличивая значение этого параметра можно уменьшить время анализа для всего сайта, но повысить нагрузку на сервер.
Значение по умолчанию: 100
.
Позволяет переопределить заголовки запросов посылаемых на сервер сайта при его анализе.
Значение по умолчанию: { 'user-agent': 'node-spider' }
.
Количество повторных запросов, которые будут посланы на url сайта, первоначальный запрос
к которому был завершен с ошибкой без определенного кода. По достижению значения параметра requestRetriesAmount
url будет помечен ошибкой.
Значение по умолчанию: 1
.
Таймаут запроса в миллисекундах.
Значение по умолчанию: 5000
.
Массив с допустимыми значениеми протоколов адресов проверяемых ссылок. Например, чтобы проверять
только url-ы, вида http://...
и https://...
, необходимо выставить значением данной опции: ['http:', 'https:']
.
Значение по умолчанию: ['http:', 'https:']
.
Флаг который позволяет управлять проверкой ссылок на внешние ресурсы. По умолчанию, значение
данного параметра равно false
, что означает, что проверяться будут только ссылки на страницы проверяемого сайта.
Значение по умолчанию: false
Позволяет исключить определенные разделы сайта из анализа. Значением этой опции яляется массив регулярных выражений
и строковых шаблонов при матчинге на которые url будет включен или исключен из анализа. Например, для того чтобы исключить разделы foo
и bar
из процесса анализа cайта, нужно указать значением опции
[/\/foo/i, /\/bar/i]
.
Значение по умолчанию: []
Примеры различных вариантов шаблонов для исключения адресов ссылок:
module.exports = {
...
excludeLinkPatterns: [
/\/contacts/,
http://google.com,
http://my.site.com/foo/*,
*/foo/bar
]
}
Функция, которая будет вызвана по завершению анализа сайта. Данная функция принимает аргументом экземпляр класса Statistic
, в котором хранятся все результаты анализа и методы для работы с ними.
Примеры использования инструмента можно посмотреть здесь.
Запуск тестов с вычислением покрытия кода тестами с помощью инструмента istanbul:
$ npm test
Проверка синтаксиса кода с помощью: jshint, jscs
$ npm run codestyle
Особая благодарность за помощь в разработке:
Разработчик: Кузнецов Андрей
Вопросы и предложения присылать по адресу или в раздел issues репозитория данного инструмента.