Ось готовий урок, створений спеціально для тебе у стилі David Malan — енергійно, з живими прикладами та фокусом на розумінні суті процесу.
🎓 УРОК: ДЕПЛОЙ REACT-ЗАСТОСУНКУ
(Як показати свій код світові)
1. 🔥 Вступ: «localhost» працює тільки для вас
Уявіть ситуацію. Ви витратили тижні, створюючи свій ідеальний React-застосунок. Це, скажімо, ваш особистий трекер звичок. Він виглядає чудово, кнопки натискаються, анімації плавні.
Ви такі горді, що копіюєте посилання з браузера: http://localhost:3000/my-app і надсилаєте його другу в Telegram: "Заціни, що я зробив!".
Через хвилину друг пише: "Емм... тут помилка. Сайт не відкривається".
Чому так сталося?
Тому що localhost — це ваша квартира. Коли ви даєте другу це посилання, ви, по суті, кажете йому: "Зайди у свою квартиру і подивись на стіл". Але на його столі вашого проєкту немає! Він є тільки у вас.
Щоб ваш застосунок побачили всі — друг, рекрутер, ваша бабуся — вам потрібно винести його з "квартири" на "міську площу". Цей процес і називається Деплой (Deployment).
Без деплою ваш код — це як геніальна рукописна книга, яка лежить у замкненій шухляді. Сьогодні ми відкриємо цю шухляду і надрукуємо тираж.
2. 🧠 Теоретична база: Що відбувається під капотом?
Перш ніж натискати кнопки, давайте розберемося, що таке React-застосунок насправді.
Коли ви пишете код, у вас є купу файлів: .jsx, .css, папки components, hooks тощо. Але браузер (Chrome, Safari) не розуміє JSX і складну структуру папок React "з коробки" так, як це робить Node.js середовище розробки.
Концепція "Білду" (Build)
Щоб браузер зрозумів ваш код, його треба "перекласти" і "спресувати". Цей процес називається Build.
Як це працює? Уявіть, що ви збираєтеся у подорож (це деплой). 1. Ваш код (Development): Це ваша шафа. Одяг розкиданий, шкарпетки в різних кутках, все зручно для вас, щоб швидко щось знайти й поміряти. 2. Build-процес: Це пакування валізи. Ви складаєте речі акуратно, випускаєте зайве повітря (мінімізація коду), викидаєте те, що не будете носити (tree shaking). 3. Результат (Production Build): Компактна валіза.
У світі React, коли ми робимо "Build", інструмент (Vite або Webpack) бере ваші 100 файлів і перетворює їх на:
* Один (або декілька) .js файлів (Bundle).
* Один .css файл.
* Один index.html, який це все підтягує.
⚠️ Головне, що треба запам'ятати: Після білду ваш React-застосунок стає просто набором статичних файлів (як звичайна картинка чи текстовий документ). Йому більше не потрібен складний сервер з логікою (як для Python чи PHP), йому просто потрібно місце, звідки ці файли можна завантажити.
3. 🧪 Приклади: Від магії до реальності
Приклад 1: Що ми очікуємо побачити?
Якщо ви зараз у терміналі свого проєкту напишете команду для запуску, що зазвичай відбувається?
Ви пишете npm run dev (або npm start), і сервер запускається, вірно? Він "слухає" зміни. Змінили кому — сторінка оновилася.
Але для деплою нам потрібна статика.
Давайте спробуємо команду:
npm run build
Що сталося?
У вашій папці проєкту з'явилася нова папка: dist (якщо Vite) або build (якщо CRA).
Загляньте всередину. Там немає компонентів. Там є файл типу index-x8s7f.js — це і є ваш "спакований" код. Цю папку можна закинути на будь-який хостинг, і сайт запрацює.
Приклад 2: Реальний деплой (Vercel / Netlify)
Найсучасніший спосіб — це автоматизація. Ми не будемо копіювати файли руками через FTP, як це робили в 2005 році.
Сценарій: 1. Ви заливаєте свій код на GitHub. 2. Ви реєструєтесь на Vercel (або Netlify). 3. Ви даєте Vercel доступ до вашого репозиторію.
Магія: Vercel сам побачить, що це React. Він сам запустить npm run build на своїх потужних серверах. І видасть вам посилання типу my-app.vercel.app.
Приклад 3: Проблема "Оновлення сторінки" (SPA Routing)
Трохи складніше, але критично важливо.
Уявіть, ви задеплоїли сайт. Заходите на головну: mysite.com. Все працює.
Клікаєте в меню на "Про нас", URL змінюється на mysite.com/about. Все працює.
Тепер натисніть F5 (Оновити сторінку).
Що ви очікуєте? Сторінку "Про нас". Що ви отримаєте? Помилку 404 Not Found.
Чому? 🤯
Тому що mysite.com/about — це не справжня папка на сервері. Це віртуальний шлях, який React малює в браузері. Коли ви оновлюєте сторінку, браузер йде на сервер і питає: "Дай мені файл about". А сервер каже: "У мене є тільки index.html, файлу about не існує!".
Рішення: Налаштувати сервер так, щоб на будь-який запит він віддавав index.html. Тоді React завантажиться і сам зрозуміє: "Ага, в адресному рядку /about, значить, треба показати компонент About".
4. 🛠 Практична частина
Час "забруднити руки". Виконайте ці кроки:
-
🔹 Локальний білд. Відкрийте свій проєкт. Запустіть
npm run build. Переконайтеся, що папкаdist(абоbuild) з'явилася. Відкрийте згенерованийindex.htmlу браузері. (Спойлер: Скоріш за все, нічого не запрацює або картинки не підтягнуться, бо шляхи локальні. Це нормально!) -
🔹 Симуляція сервера. Встановіть маленький інструмент:
npm install -g serve. Запустіть у терміналі:serve -s dist. Тепер відкрийте посилання, яке він дав. Це імітація того, як сайт працюватиме в інтернеті. -
🔹 GitHub. Створіть репозиторій на GitHub і залийте туди свій код (не забудьте файл
.gitignore, щоб не залитиnode_modules!). -
🔹 Деплой на Vercel (Найпростіший шлях).
- Зайдіть на vercel.com.
- Натисніть "Add New Project".
- Виберіть свій репозиторій з GitHub.
- Натисніть "Deploy".
- Зачекайте феєрверків (конфетті на екрані).
-
🔹 Міні-кейс: Зміна на льоту.
- Змініть заголовок у своєму коді локально (наприклад, "Привіт, світ!" на "Привіт, Інтернет!").
- Зробіть
git commitтаgit push. - Зайдіть на панель Vercel і подивіться, як він автоматично почав новий білд.
- Через хвилину оновіть свій живий сайт. Магія CI/CD (Continuous Deployment) в дії!
-
🔹 Питання "А що, якщо...": Що буде, якщо я видалю репозиторій на GitHub? (Відповідь: Vercel більше не зможе отримувати оновлення, але остання версія сайту, ймовірно, продовжить працювати, доки ви не спробуєте зробити новий деплой).
5. 💡 Мислення як у розробника
Як відрізнити новачка від профі при деплої?
1. node_modules в Git.
Новачок часто намагається завантажити папку node_modules на GitHub. Це 200+ мегабайт сміття.
Як думає профі: "Мій код — це рецепт. node_modules — це інгредієнти. Сервер (Vercel) сам купить інгредієнти за моїм списком (package.json), мені не треба тягнути мішок картоплі з собою".
2. Змінні середовища (Environment Variables).
У вас є API-ключ? Ніколи, чуєте, НІКОЛИ не пишіть його прямо в коді перед деплоєм, якщо код публічний.
Як думає профі: "Я створю файл .env для локальної розробки, а на сервері (Vercel) в налаштуваннях пропишу ці ключі окремо. Так хакери не вкрадуть мої доступи".
3. "У мене працює, значить, скрізь працює".
Це класична помилка.
Як думає профі: "Я завжди перевіряю білд локально (npm run build), перш ніж пушити. Якщо білд падає через помилку лінтера, краще я дізнаюся про це зараз, ніж отримаю лист про провалений деплой".
6. 🧩 Підсумок
Отже, що ми сьогодні зробили?
Ми перетворили ваш затишний домашній проєкт (localhost) на публічний веб-застосунок, доступний будь-кому з Токіо чи Нью-Йорка.
Тепер ви вмієте:
* Розуміти різницю між dev (розробка) і build (продакшн).
* Перетворювати React-код на статичні файли.
* Використовувати Vercel для автоматичного деплою з GitHub.
Що далі?
Ваш сайт в інтернеті, вітаю! Але... він вантажиться 3 секунди. Це занадто довго для сучасного світу. Як змусити React "літати"?
На наступному уроці ми поговоримо про Оптимізацію та useMemo — як зробити так, щоб ваш код не робив зайвої роботи.
А поки — надішліть посилання на свій проєкт другу. Тепер воно точно відкриється! 🚀