Умеешь ли собирать фронтенд проекты
Что проверяют
Соберёте ли вы чужой фронтенд в CI, не зная его внутренностей, и понимаете ли, чем эта сборка отличается от бэкендовой. Главное отличие в том, что публичные переменные вклеиваются в бандл на этапе сборки, и ломается конвейер чаще всего именно на этом.
Как отвечать
Опишите конвейер по шагам, называя, что и где фиксируете.
- Версия Node фиксируется файлом в репозитории и совпадает в CI и в образе, иначе сборка воспроизводится случайно.
- Зависимости ставятся из лок-файла:
npm ci, а неnpm install. Кэш каталога пакетов сохраняется между прогонами, ключ строится по хэшу лок-файла. - Дальше проверки и сборка: линтер, типы, тесты, потом
npm run build. Сборщик сегодня обычно на основе Vite или встроен во фреймворк, Webpack остался в легаси. - Результат либо статика, которую кладут за веб-сервер или в объектное хранилище с раздачей через CDN, либо приложение с серверным рендерингом, которому нужен живой процесс Node. Образ собирается многостадийно: в финальную стадию копируется только результат.
Обязательно скажите про конфигурацию. Публичные переменные попадают внутрь бандла, значит образ привязан к стенду. Либо вы собираете по образу на окружение, либо выносите настройки в файл, который читается в рантайме, и тогда один артефакт едет везде.
Мелочи, которые отличают практика: одностраничному приложению нужен возврат index.html на неизвестные пути, файлы с хэшем в имени кэшируются надолго, а сам index.html не кэшируется, при нехватке памяти на сборке поднимают лимит кучи Node.
Где спотыкаются
Считают, что переменные окружения можно подложить контейнеру при запуске. Для серверной части да, для кода, уехавшего в браузер, нет: значение зашито на момент сборки, и меняется оно пересборкой или отдельным файлом конфигурации.
Второе: ставят зависимости обычной установкой и получают плавающие версии. Лок-файл существует ровно для того, чтобы сборка недельной давности повторилась сегодня, а npm ci ещё и чистит каталог зависимостей перед установкой.
Третье: путают аудит уязвимостей с разрешением конфликтов версий. Это разные задачи: команда проверки безопасности сообщает про известные уязвимости и несовместимые версии не разводит.