Тема: Фінальна збірка та деплоймент. Оптимізація бандлу та розміщення проєкту в мережі Інтернет з налаштуванням CI/CD пайплайну.
Мета: Підготувати створений React-додаток до Production-середовища; навчитися аналізувати та оптимізувати розмір бандлу (Bundle Size); налаштувати процес Continuous Integration (CI) за допомогою GitHub Actions для автоматичного запуску тестів; розгорнути (Deploy) фінальний продукт на сучасній хмарній платформі (Vercel або Netlify).
Технологічний стек: React, Vite, Node.js, Vercel / Netlify / GitHub Pages, GitHub Actions (YAML).
ESLint), підготувавши код до Production-збірки.main.npm run build) та проаналізувати згенеровану папку /dist.Перед деплоєм професійний код не повинен містити попереджень.
npm run lint
npx tsc --noEmit
npm run lint -- --fix.Ми створимо пайплайн, який буде автоматично тестувати наш код на серверах GitHub під час кожного коміту (Commit).
.github/workflows/.main.yml:name: CI Pipeline
# Спрацьовує при пуші в гілку main або створенні Pull Request
on:
push:
branches: ["main"]
pull_request:
branches: ["main"]
jobs:
build-and-test:
runs-on: ubuntu-latest # Запускаємо віртуальну Linux-машину
steps:
- name: Клонування репозиторію
uses: actions/checkout@v3
- name: Встановлення Node.js 18
uses: actions/setup-node@v3
with:
node-version: 18
cache: "npm" # Кешуємо залежності для прискорення пайплайну
- name: Встановлення пакетів
run: npm ci # Чисте встановлення на CI замість npm install
- name: Перевірка лінтером
run: npm run lint
- name: Перевірка типів TypeScript
run: npx tsc --noEmit
- name: Запуск тестів
run: npm run test -- --run # Завершуємо процес після виконання тестів
Зробіть коміт і відправте (push) ці зміни до вашого GitHub репозиторію. Зайдіть у вкладку Actions вашого репозиторію на сайті GitHub, щоб побачити зелені галочки успішного виконання кроків.
Для підготовки до деплою Vite має згенерувати оптимізовані, мініфіковані статичні файли (HTML, CSS, JS).
npm run build
dist (або build) і розмір бандлу (зазвичай index-xxxxx.js файл).
Факт: Розмір index.js не повинен перевищувати 300-500 KB для якісного першого завантаження (First Contentful Paint).Vercel — це ідеальна PaaS-платформа для хостингу Frontend-додатків, створена авторами Next.js та Vite.
Vite.npm run build.dist.Vercel самостійно скачає ваш код, збере його (Production Build) і видасть публічне посилання (URL) на ваш сайт.
Щоразу, коли ви будете комітити в main, Vercel автоматично (у фоні) перезбиратиме ваш проєкт за лічені секунди (ЦЕ І Є CD!).
Оскільки ви використовуєте react-router-dom (з Лаб №4), ви можете зіткнутися з класичною проблемою SPA:
Якщо користувач перейде на ваш Vercel-сайт і натисне кнопку “Профіль”, URL зміниться на vash-site.vercel.app/profile (і все запрацює).
АЛЕ, якщо користувач оновить сторінку (F5) прямо на vash-site.vercel.app/profile, сервер Vercel поверне помилку 404 (Not Found).
Чому? Сервер намагатиметься знайти фізичний файл /profile/index.html у вашій папці dist, якого не існує (бо існує тільки один index.html від SPA).
Вирішення для Vercel:
Створіть у корені вашого проєкту файл vercel.json:
{
"rewrites": [
{
"source": "/(.*)",
"destination": "/index.html"
}
]
}
Це правило інструктує сервер Vercel: “Всі невідомі запити перенаправляти напряму на index.html, а там вже React Router сам розбереться, який шлях (Route) відмалювати”.
_(Прим. Якщо ви деплоїте на Netlify, вам потрібно створити файл public/_redirects з вмістом /_ /index.html 200)*.
src з TypeScript та JSX) і файлами, що генеруються в папці dist командою npm run build. Який процес відбувається з кодом між цими кроками?npm ci на відміну від npm install у файлі конфігурації пайплайну на CI-сервері (GitHub Actions)?mysite.com/dashboard/users). Який механізм React Router (історія браузера) лежить в основі цього конфлікту і логіки створення файлу vercel.json?main.yml) має бути написана до того як ми віддамо платформі доступ на об’єднання гілок коду (Pull Requests) в main і які метрики якості повинні виконуватися як обов’язкова умова (напр., лінтинг, тести)?main.yml присутній у папці .github/workflows). На скріншоті репозиторію вкладка Actions повинна містити успішні (зелені) запуски пайплайну.lab_09.md дати вичерпні відповіді на 5 контрольних запитань.