Перейти к содержанию
Educora
Продвинутый16 мин14 / 27

Модули и современные инструменты

Разбивай код на файлы с помощью `import` и `export`, подключай пакеты через npm и познакомься с инструментами профессионалов: Vite, ESLint, Prettier.

Проверь себя
В этом уроке ты узнаешь
  • Писать и импортировать именованные экспорты и экспорт по умолчанию
  • Объяснять, что даёт <script type="module"> в браузере
  • Понимать роль npm, package.json и пакетов
  • Знать, зачем нужны сборщик, линтер и форматтер

В реальном приложении десятки тысяч строк кода. Если сложить всё в один файл, искать нужное, работать в команде и исправлять ошибки станет кошмаром. Поэтому код делят на небольшие логичные части — модули, а готовые решения подключают как пакеты. Это последний шаг от изучения JavaScript к профессиональной работе с ним.

Модули: export и import

Определение
Модуль

Отдельный файл со своей областью видимости. Его переменные и функции снаружи не видны — в другие файлы через import можно взять только то, чем он явно поделился через export.

Экспорт бывает двух видов. Именованных экспортов (export const, export function) в файле может быть сколько угодно, и импортируют их в фигурных скобках под тем же именем. Экспорт по умолчанию (export default) в файле только один, и импортируют его без скобок под любым именем.

JavaScript
// math.js
export const PI = 3.14159;

export function circleArea(radius) {
  return PI * radius * radius;
}

export default function greet(name) {
  return `Hello, ${name}!`;
}
Файл math.js экспортирует два именованных значения и одно по умолчанию.
JavaScript
// app.js
import greet, { circleArea, PI } from './math.js';
import * as math from './math.js';

console.log(greet('Aysel'));
console.log(circleArea(2).toFixed(2));
console.log(PI === math.PI);
Ожидаемый результат
Hello, Aysel!
12.57
true
app.js берёт только нужное. import * as math собирает все именованные экспорты в один объект.
ЭкспортИмпортПримечание
export function circleAreaimport { circleArea } from './math.js'имя должно совпадать
export const PIimport { PI as pi } from './math.js'as позволяет переименовать
export default function greetimport hello from './math.js'без скобок, любое имя

Модули в браузере

О том, что файл — модуль, браузеру сообщают атрибутом type="module". В таком скрипте работают import/export, переменные не «засоряют» глобальную область, код выполняется в строгом режиме (strict mode) и запускается после полной загрузки страницы. Кроме того, в модуле await можно писать вне функций — на верхнем уровне файла:

HTML
<p id="status">Loading the menu...</p>

<script type="module">
  const wait = (ms) => new Promise((resolve) => setTimeout(resolve, ms));

  await wait(1500);

  const menu = ['plov', 'dolma', 'pakhlava'];
  document.querySelector('#status').textContent = `Menu: ${menu.join(', ')}`;
</script>
Предпросмотр
В обычном <script> await на верхнем уровне был бы синтаксической ошибкой, а в модуле он работает.

npm и пакеты

Форматирование дат, построение графиков, написание тестов — для всего этого есть готовые пакеты, написанные другими разработчиками. npm (Node Package Manager) — менеджер пакетов, который устанавливается вместе с Node.js. Сведения о проекте, его зависимости и команды хранятся в файле package.json, а загруженные пакеты попадают в папку node_modules.

JSON
{
  "name": "weather-app",
  "version": "1.0.0",
  "type": "module",
  "scripts": {
    "dev": "vite",
    "build": "vite build",
    "lint": "eslint ."
  },
  "dependencies": {
    "dayjs": "^1.11.10"
  },
  "devDependencies": {
    "vite": "^5.0.0",
    "eslint": "^9.0.0"
  }
}
dependencies — пакеты, нужные приложению для работы, devDependencies — инструменты только для разработки, scripts — команды вроде npm run dev.
  1. 1
    Создай проект

    В терминале введи npm create vite@latest my-app и выбери шаблон Vanilla и JavaScript.

  2. 2
    Установи зависимости

    Перейди в папку командой cd my-app и выполни npm install.

  3. 3
    Добавь пакет

    Введи npm install dayjs, а затем используй его в коде: import dayjs from 'dayjs';.

  4. 4
    Запусти сервер разработки

    Введи npm run dev и открой адрес, показанный в терминале (обычно http://localhost:5173). Страница обновляется сама, как только ты сохраняешь файл.

Современные инструменты

Вид инструментаЧто делаетПримеры
Менеджер пакетовзагружает и обновляет пакетыnpm, pnpm, Yarn
Сборщик и dev-серверсобирает и сжимает модули для сайтаVite, webpack, esbuild
Линтернаходит ошибки и плохие приёмы, не запуская кодESLint
Форматтеравтоматически оформляет код в едином стилеPrettier
Тестовый фреймворкавтоматически проверяет, что код работает правильноVitest, Jest
Задание

Текст файла package.json дан строкой. Прочитай его через JSON.parse и выведи: 1) имя@версия (weather-app@1.4.2), 2) каждую зависимость на отдельной строке в виде имя версия, 3) Dev tools: N — число пакетов в devDependencies.

Задание · JavaScript
const text = '{"name": "weather-app", "version": "1.4.2", "dependencies": {"dayjs": "^1.11.10", "lodash": "^4.17.21"}, "devDependencies": {"vite": "^5.0.0", "eslint": "^9.0.0"}}';

// 1) parse the text and print name@version
// 2) print every dependency as: name version
// 3) print Dev tools: N
▸ Ожидаемый результат
weather-app@1.4.2
dayjs ^1.11.10
lodash ^4.17.21
Dev tools: 2

Главное

  • Модуль — файл со своей областью видимости; export делится значениями, import их забирает.
  • Именованные экспорты импортируют в { } под тем же именем, export default — без скобок и под любым именем.
  • <script type="module"> даёт import/export, собственную область видимости, строгий режим и await на верхнем уровне.
  • npm устанавливает пакеты; зависимости и команды проекта хранятся в package.json.
  • Vite запускает и собирает проект, ESLint находит ошибки, Prettier форматирует код.

Проверь себя

Вопросов: 10. Каждый правильный ответ приносит XP.

1 / 10
Как поделиться функцией, чтобы её можно было использовать в другом файле?