Настройка с другими сборщиками

TanStack Router предоставляет гибкий и мощный механизм маршрутизации для приложений на JavaScript и TypeScript. Одним из ключевых аспектов работы с ним является корректная интеграция с современными сборщиками, такими как Vite, Webpack, Parcel и esbuild. Правильная настройка сборщика обеспечивает оптимальное время сборки, поддержку горячей перезагрузки и эффективное дерево зависимостей.


Настройка с Vite

Vite использует нативный ES-модульный подход, что значительно ускоряет процесс разработки. Для работы с TanStack Router необходимо учитывать несколько особенностей:

  • Поддержка ES-модулей: TanStack Router полностью ориентирован на ESM, поэтому необходимо убедиться, что сборка не транспилирует модули обратно в CommonJS.
  • Автоподключение маршрутов: Часто используется подход с динамическим импортом компонентов через import() для ленивой загрузки. В Vite важно использовать синтаксис, который поддерживает tree-shaking:
import { Router } from '@tanstack/router';
import { createBrowserHistory } from '@tanstack/router-history';

const router = new Router({
  history: createBrowserHistory(),
  routes: [
    {
      path: '/',
      component: () => import('./pages/Home.jsx')
    },
    {
      path: '/about',
      component: () => import('./pages/About.jsx')
    }
  ]
});

export default router;
  • Alias и пути: Vite позволяет использовать @ или другие алиасы для упрощения импортов. Настройка в vite.config.js:
import { defineConfig } from 'vite';
import path from 'path';

export default defineConfig({
  resolve: {
    alias: {
      '@': path.resolve(__dirname, './src')
    }
  }
});

Эта конфигурация позволяет легко подключать компоненты маршрутов без длинных относительных путей.


Настройка с Webpack

При интеграции с Webpack необходимо учитывать поддержку динамических импортов и код-сплиттинг:

  • Code Splitting: TanStack Router отлично работает с React.lazy и Suspense. Для динамических маршрутов рекомендуется:
import { Router } from '@tanstack/router';
import { createBrowserHistory } from '@tanstack/router-history';
import React, { lazy, Suspense } from 'react';

const Home = lazy(() => import('./pages/Home.jsx'));
const About = lazy(() => import('./pages/About.jsx'));

const router = new Router({
  history: createBrowserHistory(),
  routes: [
    { path: '/', component: () => <Suspense fallback={<div>Loading...</div>}><Home /></Suspense> },
    { path: '/about', component: () => <Suspense fallback={<div>Loading...</div>}><About /></Suspense> }
  ]
});

export default router;
  • Настройка Babel: Для поддержки последних возможностей TanStack Router (например, TypeScript с расширенными типами маршрутов) нужно убедиться, что Babel настроен на поддержку ESNext:
{
  "presets": ["@babel/preset-env", "@babel/preset-react", "@babel/preset-typescript"]
}
  • Hot Module Replacement (HMR): Для Webpack рекомендуется включать HMR в точке входа приложения, чтобы изменения в маршрутах отображались без полной перезагрузки:
if (module.hot) {
  module.hot.accept();
}

Настройка с Parcel

Parcel отличается минимальной конфигурацией и автоматическим распознаванием модулей:

  • Динамические импорты: Parcel автоматически создает отдельные чанки при использовании import(). Это упрощает ленивую загрузку страниц в TanStack Router.
  • TypeScript: Parcel автоматически компилирует .ts и .tsx файлы, поэтому дополнительных шагов почти не требуется.
  • Alias: Для настройки путей используется файл package.json:
{
  "alias": {
    "@components": "./src/components"
  }
}
  • Environment Variables: Для маршрутов, которые зависят от конфигурации окружения, используется process.env или встроенные .env файлы Parcel.

Настройка с esbuild

esbuild обеспечивает чрезвычайно быструю сборку, но требует явного указания опций для динамических импортов:

  • Code Splitting: В esbuild включается флаг splitting: true вместе с format: 'esm':
require('esbuild').build({
  entryPoints: ['src/index.jsx'],
  bundle: true,
  splitting: true,
  format: 'esm',
  outdir: 'dist'
}).catch(() => process.exit(1));
  • Поддержка React: Если приложение использует React, нужно подключить JSX-флаг:
jsx: 'automatic'
  • Alias и пути: esbuild поддерживает плагины для алиасов, например esbuild-plugin-alias.

Рекомендации по оптимизации

  • Ленивая загрузка маршрутов: Использование динамического импорта минимизирует основной бандл и ускоряет время первой загрузки.
  • Tree-shaking: Все сборщики поддерживают tree-shaking для ESM, что позволяет исключить неиспользуемый код из TanStack Router.
  • Совместимость с TypeScript: Включение строгой типизации для маршрутов помогает предотвратить ошибки на этапе компиляции.
  • Hot Reload и Fast Refresh: Для разработки рекомендуется поддерживать HMR или React Fast Refresh, чтобы изменения маршрутов и компонентов отображались мгновенно.

TanStack Router демонстрирует универсальность при интеграции с любыми современными сборщиками. Основные задачи — корректная настройка динамических импортов, поддержка ESM и оптимизация кода через ленивую загрузку и tree-shaking. Это обеспечивает не только удобную разработку, но и высокую производительность конечного приложения.