- Писать и импортировать именованные экспорты и экспорт по умолчанию
- Объяснять, что даёт
<script type="module">в браузере - Понимать роль npm,
package.jsonи пакетов - Знать, зачем нужны сборщик, линтер и форматтер
В реальном приложении десятки тысяч строк кода. Если сложить всё в один файл, искать нужное, работать в команде и исправлять ошибки станет кошмаром. Поэтому код делят на небольшие логичные части — модули, а готовые решения подключают как пакеты. Это последний шаг от изучения JavaScript к профессиональной работе с ним.
Модули: export и import
Отдельный файл со своей областью видимости. Его переменные и функции снаружи не видны — в другие файлы через import можно взять только то, чем он явно поделился через export.
Экспорт бывает двух видов. Именованных экспортов (export const, export function) в файле может быть сколько угодно, и импортируют их в фигурных скобках под тем же именем. Экспорт по умолчанию (export default) в файле только один, и импортируют его без скобок под любым именем.
// 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 экспортирует два именованных значения и одно по умолчанию.// 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 circleArea | import { circleArea } from './math.js' | имя должно совпадать |
export const PI | import { PI as pi } from './math.js' | as позволяет переименовать |
export default function greet | import hello from './math.js' | без скобок, любое имя |
Модули в браузере
О том, что файл — модуль, браузеру сообщают атрибутом type="module". В таком скрипте работают import/export, переменные не «засоряют» глобальную область, код выполняется в строгом режиме (strict mode) и запускается после полной загрузки страницы. Кроме того, в модуле await можно писать вне функций — на верхнем уровне файла:
<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.
{
"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Создай проект
В терминале введи
npm create vite@latest my-appи выбери шаблонVanillaиJavaScript. - 2Установи зависимости
Перейди в папку командой
cd my-appи выполниnpm install. - 3Добавь пакет
Введи
npm install dayjs, а затем используй его в коде:import dayjs from 'dayjs';. - 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.
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.