Импорт функций и переменных JS

Импорт функций и переменных из JavaScript-файлов — это основа модульной архитектуры в React. В отличие от статических ресурсов (изображений, шрифтов и т.д.), код импортируется и выполняется как часть приложения, а не как внешний ассет. Это достигается с помощью стандарта ES-модулей, поддерживаемого всеми современными сборщиками.

Как экспортировать и импортировать

В одном файле (например, utils.js) вы объявляете и экспортируете функции или переменные:

// utils.js
export const API_URL = 'https://api.example.com';
export function formatDate(date) {
  return date.toLocaleDateString();
}

В компоненте или другом модуле вы импортируете их:

import { API_URL, formatDate } from './utils';

function App() {
  return <div>Адрес API: {API_URL}</div>;
}

Виды экспорта

  • Именованный экспорт (export const x = ...) — позволяет экспортировать несколько значений из одного файла. Импортируется в фигурных скобках.

  • Экспорт по умолчанию (export default function ...) — один экспорт на файл. Импортируется без скобок:

    // logger.js
    export default function log(message) {
      console.log('[APP]', message);
    }
    
    // App.jsx
    import log from './logger';
    

Отличие от импорта статических файлов

Когда вы импортируете JS-модуль:

  • Сборщик выполняет код файла (а не просто копирует его),
  • Значения становятся частью JavaScript-бандла,
  • Нет генерации хешей в именах — модуль встраивается в общий код,
  • Поддерживается tree-shaking: неиспользуемые именованные экспорты могут быть удалены из финальной сборки.

В отличие от изображений или JSON, вы не получаете строку с путём — вы получаете сами значения (функции, объекты, примитивы).

Практическое применение

  • Вынос логики в утилиты (formatDate, validateEmail),
  • Централизованное хранение констант (API_URL, THEME_COLORS),
  • Разделение компонентов и бизнес-логики,
  • Создание переиспользуемых хуков (useLocalStorage, useDebounce).

Импорт JS-модулей — это не «работа с файлами» в смысле ресурсов, а основа структуры кода. Он не требует специальной обработки сборщиком, кроме объединения и оптимизации модулей.