Navigo — легковесная библиотека для управления маршрутизацией в одностраничных приложениях на JavaScript. Поскольку библиотека активно развивается, важно понимать различия между версиями и особенности обновления, чтобы обеспечить корректную работу приложения и избежать ошибок совместимости.
Начиная с версии 8, Navigo полностью ориентирована на современные браузеры и использование синтаксиса ES6. Это означает:
class вместо функций-конструкторов.import Navigo from 'navigo').Старые проекты на ES5 требуют трансляции через Babel для корректной работы последних версий.
В последних версиях была переработана логика сопоставления URL с маршрутами:
Статические маршруты (/home,
/about) остались прежними.
Динамические сегменты теперь поддерживаются с более гибкими параметрами:
router.on('/user/:id', ({ data }) => {
console.log(data.id); // получаем значение параметра id
});Опциональные параметры:
router.on('/search/:query?', ({ data }) => {
console.log(data.query || 'пустой запрос');
});Навигация теперь позволяет подключать хуки для более детального контроля:
before — вызывается перед изменением маршрута.
Позволяет отменять переход:
router.hooks({
before: (done, params) => {
if (!params.id) return done(false); // блокируем переход
done();
}
});after — срабатывает после успешного
перехода.
error — обработка ошибок маршрутизации.
Эти хуки упрощают интеграцию с аутентификацией, проверкой доступа и логированием.
В последних версиях расширен набор методов для управления переходами:
navigate(path, { replace: true }) — переход с
возможностью замены истории браузера.resolve() — ручное триггерирование проверки маршрута,
полезно при динамическом изменении URL без перезагрузки.destroy() — отключение маршрутизатора и очистка всех
слушателей.Появилась возможность задавать базовый путь для маршрутов, что особенно важно при развертывании приложения в подкаталогах:
const router = new Navigo('/app', { hash: true });
Теперь все маршруты будут автоматически относиться к
/app, а использование хэш-навигации
(hash: true) обеспечивает совместимость с серверами без
поддержки HTML5 History API.
Анализ существующего кода Проверить, какие функции использовались: старый синтаксис, колбэки, хэши, динамические параметры.
Выбор целевой версии
v8+) оправдано.7.x, с
последующей трансляцией через Babel.Обновление синтаксиса
new Navigo().Тестирование маршрутов Проверять как
статические, так и динамические маршруты, включая опциональные
параметры. Проверять работу хуков before и
after, чтобы убедиться, что логика переходов
сохранена.
Оптимизация истории браузера Проверить
использование navigate с опцией replace,
особенно при редиректах и логике аутентификации.
Navigo сохраняет обратную совместимость на уровне основных функций, однако:
router.on({...})) могут требовать переписывания.data.base URL и hash только если
приложение размещается в подкаталогах или требуется поддержка старых
браузеров.Navigo остаётся одним из самых лёгких и гибких инструментов для маршрутизации SPA, а понимание различий версий позволяет минимизировать проблемы при обновлении и обеспечивать стабильность работы приложения.