Библиотека Navigo обеспечивает управление маршрутизацией в одностраничных приложениях (SPA) на JavaScript. Для production-окружения важно правильно настроить маршрутизатор, чтобы обеспечить стабильность, корректную работу ссылок и минимизацию ошибок при деплое.
Для production обычно используют строгий режим hash или
history, в зависимости от конфигурации сервера.
import Navigo from 'navigo';
const router = new Navigo('/', {
strategy: 'ALL', // 'ALL' или 'PATH' в зависимости от сервера
hash: false // true — использовать хэш-роутинг, false — history API
});
Ключевые моменты:
hash: true — подходит для статических серверов, где нет
поддержки rewrite rules.hash: false — использует History API и требует
настройки сервера для возврата index.html на все маршруты.В production важно явно указать базовый путь приложения, особенно если приложение находится не в корне домена:
const router = new Navigo('/app/', { hash: false });
/app/ — корневой путь приложения.useHash
против History APIHash-режим (useHash: true) проще в
настройке:
example.com/#/dashboard.History API (useHash: false) выглядит
«чисто»:
example.com/dashboard.index.html на все запросы к
несуществующим файлам.Настройка для Express:
app.use(express.static('dist'));
app.get('*', (req, res) => {
res.sendFile(path.resolve(__dirname, 'dist', 'index.html'));
});
Production-приложения часто используют динамические маршруты с параметрами:
router.on('/user/:id', ({ data }) => {
console.log('ID пользователя:', data.id);
});
:id — обязательный параметр.router.on('/product/:id(\\d+)', ({ data }) => {
console.log('ID продукта:', data.id);
});
\\d+ — только числа.В production важно обработать несуществующие маршруты:
router.notFound(() => {
document.body.innerHTML = '<h1>Страница не найдена</h1>';
});
router.notFound(() => {
router.navigate('/');
});
Для крупных приложений стоит подключать обработчики маршрутов через динамический импорт, чтобы уменьшить размер бандла:
router.on('/dashboard', async () => {
const module = await import('./pages/dashboard.js');
module.render();
});
Для production важно контролировать историю браузера:
router.navigate('/dashboard'); // программная навигация
router.updatePageLinks(); // обновление всех <a> с data-navigo
updatePageLinks() автоматически перехватывает клики на
ссылках.Для production стоит явно указать ключевые опции:
const router = new Navigo('/', {
hash: false,
linksSelector: 'a', // селектор ссылок для перехвата
strategy: 'ALL', // оптимизация для сервера
noMatchWarning: false // отключение предупреждений в консоли
});
linksSelector позволяет ограничить область
перехвата.strategy: 'ALL' улучшает поддержку nested routes на
сервере.noMatchWarning: false отключает лишние сообщения в
консоли.Для production важно:
hash или
history).Эти шаги обеспечивают стабильную работу Navigo в боевом окружении, повышают производительность и делают маршрутизацию предсказуемой.