@hexlet/java-flight-booking-frontend
v1.0.0
Published
Фронтенд сервиса бронирования авиабилетов. Хекслет предоставляет его студенту-бекендеру: приложение работает поверх API, которое студент реализует по контракту.
Readme
frontend — готовый фронтенд для студента-бекендера
Приложение сервиса бронирования на React + Vite + TypeScript. Студент его не пишет — он подключает собранную сборку и реализует под неё API. Экраны: поиск рейсов, оформление брони, просмотр и отмена.
Публикуется как npm-пакет @hexlet/java-flight-booking-frontend, в пакет уезжает только dist.
Команды
make install # npm install
make build # tsc + vite build → dist/
make dev # дев-сервер на :5173, проксирует /api на $API_URL (дефолт http://localhost:8080)
make publish # npm publish (вручную, нужен токен)Публикация
Первая версия 1.0.0 уезжает целью make publish, дальше make release (release-it: подъём версии, тег, npm publish). Нужен npm-токен с правом публиковать в скоуп @hexlet, он читается из ~/.npmrc.
Отказ E404 Not Found — PUT https://registry.npmjs.org/@hexlet%2f… означает отсутствие авторизации, а не отсутствие пакета. Реестр не подтверждает существование scoped-пакета неавторизованному клиенту и отвечает 404 вместо 401, поэтому сообщение указывает не туда. Различается одной командой:
$ npm whoami
npm error code E401
npm error 401 Unauthorized - GET https://registry.npmjs.org/-/whoamiЛечится npm login --scope=@hexlet или новым Automation-токеном в ~/.npmrc. Если npm whoami отвечает логином, а публикация всё равно даёт 404 — нет права публикации в скоуп.
Как он попадает в приложение
code/package.json зависит от этого пакета, make -C code build копирует его dist в public/,
откуда статику раздаёт сервер студента. Запросы идут по относительным путям /api/... — тот же
origin, что и приложение; абсолютного адреса API в сборке нет.
Пока пакет не опубликован в npm, зависимость указана как file:../frontend — npm подставляет
локальный каталог симлинком. После публикации это меняется на версию из реестра одной строкой в
code/package.json.
Чего здесь намеренно нет
Зависимости от @hexlet/frontend-flight-booking-server. В проекте для фронтендеров этот пакет
подключён и раздаёт статику вместе с API, но он же — полная эталонная реализация API, то есть
готовое решение задачи бекендера. Здесь его быть не должно ни в зависимостях, ни в скриптах.
