Перейти к содержимому
29 / 43

Что такое именованный экспорт и экспорт по умолчанию?


Полный ответ

JavaScript
// === Именованный экспорт ===
// math.js
export const PI = 3.14159;

export function add(a, b) {
  return a + b;
}

export class Vector {
  constructor(x, y) {
    this.x = x;
    this.y = y;
  }
}

// Импорт — имена должны совпадать
import { PI, add, Vector } from "./math.js";

// Переименование при импорте
import { add as sum } from "./math.js";
sum(2, 3); // 5

// Импорт всего как объект
import * as math from "./math.js";
math.add(2, 3);
math.PI;

JavaScript
// === Экспорт по умолчанию ===
// logger.js
export default class Logger {
  log(msg) {
    console.log(`[LOG] ${msg}`);
  }
}

// Импорт — имя выбираешь сам
import Logger from "./logger.js";
import MyLogger from "./logger.js"; // тоже работает — имя любое

Можно комбинировать оба типа:

JavaScript
// api.js
export const BASE_URL = "https:// api.example.com";

export function get(path) { /* ... */ }

export function post(path, data) { /* ... */ }

export default class ApiClient {
  constructor(token) {
    this.token = token;
  }
}

// Импорт обоих типов
import ApiClient, { BASE_URL, get, post } from "./api.js";

Разные способы объявить экспорт:

JavaScript
// Способ 1: export при объявлении
export const name = "Alice";

export function greet() {}

// Способ 2: export списком в конце файла
const name = "Alice";

function greet() {}
export { name, greet };

// Способ 3: переименование при экспорте

function internalHelper() {}
export { internalHelper as helper };

// Способ 4: реэкспорт из другого модуля
export { add, subtract } from "./math.js";
export { default as Math } from "./math.js";

Реальные кейсы

Почему именованные экспорты лучше для большинства случаев:

JavaScript
// ❌ default export — IDE не знает, что внутри, до импорта
import something from "./utils.js"; // что за something?

// ✅ named export — IDE подсказывает имена при вводе
import { formatDate, parseDate } from "./utils.js"; // всё ясно

// ❌ default export — каждый разработчик называет по-своему
import Button from "./Button.js";
import Btn from "./Button.js";
import MyButton from "./Button.js"; // хаос при поиске по проекту

// ✅ named export — одно имя во всём проекте
import { Button } from "./Button.js"; // единообразно

Когда default export уместен — один главный экспорт на файл:

JavaScript
// React-компонент — один компонент на файл

// UserProfile.jsx
export default function UserProfile({ user }) {
  return <div>{user.name}</div>;
}

Резюме

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

Что такое именованный экспорт и экспорт по умолчанию? | JScriptiser