Урок 01

Подготовка к деплою

Перед деплоем проект нужно подготовить: переменные, сборка, проверки.

Переменные окружения

.env.local — локально

DATABASE_URL=postgresql://localhost:5432/myapp
AUTH_SECRET=dev-secret
NEXT_PUBLIC_API_URL=http://localhost:3000

.env.example — в репозиторий

DATABASE_URL=
AUTH_SECRET=
NEXT_PUBLIC_API_URL=

Без значений. Показывает, какие переменные нужны.

В .gitignore

.env
.env.local
.env*.local

Секреты не попадают в репозиторий.

NEXT_PUBLIC_*

Переменные с префиксом NEXT_PUBLIC_ доступны на клиенте. Попадают в бандл — не храни секреты.

const apiUrl = process.env.NEXT_PUBLIC_API_URL; // доступно везде
const secret = process.env.AUTH_SECRET;        // только на сервере

Проверка типов

npx tsc --noEmit

Или в package.json:

{
    "scripts": {
        "typecheck": "tsc --noEmit"
    }
}

Линтер

npm run lint

Или:

npx eslint .

Форматирование

Prettier:

npx prettier --write .

Сборка

npm run build

Проверь, что сборка проходит без ошибок и без предупреждений. Предупреждения часто указывают на проблемы в продакшене.

Анализ бандла

ANALYZE=true npm run build

Показывает, что занимает место. Тяжёлые зависимости можно заменить или динамически импортировать.

Размер бандла

npm run build

Vercel покажет размер каждой страницы. Первая загрузка не должна быть больше ~200 КБ JS.

Проверка продакшен-сборки

npm run build
npm run start

Открой http://localhost:3000 — это то, что увидит пользователь.

Тесты

Если есть — прогони:

npm test
npm run test:e2e

Чек-лист

  • .env.local не в репозитории
  • .env.example обновлён
  • tsc --noEmit проходит
  • Линтер без ошибок
  • Сборка без ошибок
  • Продакшен-сборка работает
  • Тесты проходят
  • Размер бандла в норме
  • Все секреты — на сервере

Итоги

  • Переменные через .env
  • NEXT_PUBLIC_* — для клиента
  • Проверяй типы и линтер
  • Сборка без ошибок
  • Анализ бандла
  • Тестируй продакшен-сборку