Когда команда инженеров настраивает сквозное тестирование интерфейса, параллельный запуск тестов часто натыкается на преграду. Несколько воркеров пытаются поднять собственный экземпляр приложения для проверки сборки, но обнаруживают, что порт или служебный файл блокировки уже заняты соседним процессом. Сентябрьский релиз веб-фреймворка Astro 7.3 снимает эту проблему, а также приносит полезные инструменты для авторов плагинов и разработчиков бессерверных приложений на Cloudflare.
Astro популярен благодаря архитектуре «островов» (Islands Architecture): страницы генерируются в виде легковесного статического HTML, а интерактивные компоненты гидратируются изолированно только там, где это нужно пользователю. В версии 7.3 фокус сделан на инфраструктуре и удобстве командной разработки.
Снятие замка: параллельный прогон preview-серверов в CI
В крупных проектах запуск E2E-тестов (например, в Playwright или Cypress) делят на параллельные потоки. Раньше команда astro preview, служащая для локальной проверки собранного продакшен-бандла, блокировала повторные запуски из-за проверки глобального файла блокировки. Если второй тестовый процесс запускался на соседнем порту, он завершался ошибкой.
В Astro 7.3 добавлен флаг --ignore-lock. В сценариях автоматизации теперь можно запускать любое количество изолированных серверов предварительного просмотра на динамических портах, не опасаясь взаимных блокировок в конвейере CI/CD:
# Запуск изолированного preview-сервера для первого тестового воркера
npx astro preview --port 4321 --ignore-lock &
# Параллельный запуск второго инстанса для независимого набора тестов
npx astro preview --port 4322 --ignore-lock &
Благодаря этой опции интеграционные тесты больше не требуют искусственной синхронизации или сторонних оберток.
Структурированное логирование для кастомных сервисов
Вторая проблема касалась чистоты системных логов. При создании специализированных сервисов оптимизации изображений (на базе libvips или Sharp) либо кастомных провайдеров кэша разработчикам приходилось выводить предупреждения через console.warn. Такие сообщения выбивались из общего формата Astro, засоряли вывод в терминале и игнорировали флаги детализации (--verbose или --silent).
Начиная с версии 7.3, ядро Astro передает полноценный объект logger непосредственно в методы кастомных сервисов. Разработчики плагинов могут выводить предупреждения и диагностику с префиксом фреймворка, соблюдая общую политику логирования проекта:
// src/image-service.ts: кастомный сервис обработки изображений
import type { LocalImageService } from 'astro';
export const customImageService: LocalImageService = {
validateOptions(options) {
return options;
},
getURL(options) {
return `/custom-images/${options.src}?w=${options.width}`;
},
// В метод трансформации пробрасывается контекст с системным логгером Astro
async transform(inputBuffer, transformOptions, { logger }) {
if (transformOptions.width && transformOptions.width > 4000) {
logger.warn(`Изображение высокого разрешения (${transformOptions.width}px) может замедлить сборку.`);
}
return { data: inputBuffer, format: 'webp' };
}
};
Хелпер finalize() и сохранение заголовков в Cloudflare
Для проектов с серверным рендерингом (SSR) в Cloudflare Workers адаптер @astrojs/cloudflare предоставил новый инструмент управления ответом — утилиту finalize().
Когда инженеры переопределяют стандартную точку входа воркера и добавляют собственную промежуточную логику (middleware), часто терялись служебные метаданные: сессионные куки Set-Cookie, заголовки инвалидации кэша CDN Cache-Tag и заголовки безопасности. Функция finalize(response, fetchState) объединяет заголовки пользовательского ответа с внутренним состоянием запроса Astro, гарантируя сохранность сессий и корректность кэширования.
Оптимизация документации в Starlight 0.42
Одновременно с релизом ядра обновился Starlight — генератор документации на базе Astro. В версии 0.42 удалены устаревшие полифилы и оптимизированы клиентские скрипты, что заметно сократило объем клиентского JavaScript. Инженеры также переработали навигацию с клавиатуры и фокусные состояния элементов, повысив доступность страниц для пользователей со скринридерами.
Обновление до Astro 7.3 полностью обратно совместимо и выполняется командой npx @astrojs/upgrade. Релиз делает работу с фреймворком более предсказуемой как локально, так и в облачных пайплайнах.
