Skip to content
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