veilletech.fr
4 sept. Feed du jour
#05 WEB Article

Astro 7.3 débloque preview et Cloudflare

Trois correctifs de confort. Le premier vous rend vos tests parallèles.

Astro 7.3 ajoute --ignore-lock à astro preview, ce qui permet enfin de lancer plusieurs serveurs de prévisualisation en parallèle — utile pour Playwright. La version passe aussi le logger d'Astro aux services d'images et aux fournisseurs de cache personnalisés, qui n'avaient que console.warn, et @astrojs/cloudflare ajoute un helper finalize() pour les entrypoints worker maison.

2 min de lectureintermédiairevidéo 1:21
Partager
Sommaire4 sections
  1. Deux serveurs de prévisualisation à la fois
  2. Le logger atteint enfin les extensions
  3. finalize() côté Cloudflare
  4. À retenir

Deux serveurs de prévisualisation à la fois

Astro 7.1 avait introduit un fichier de verrou pour empêcher le démarrage de plusieurs serveurs astro dev — la mesure visait les agents d'IA qui en lancent des copies sans le savoir — avec --ignore-lock comme échappatoire. Astro 7.2 a étendu le verrou à astro preview, sans reprendre le drapeau. Résultat : plus moyen de faire tourner deux prévisualisations en parallèle, ce qui gêne précisément au moment des tests Playwright.

Terminal
astro preview --ignore-lock

Ces instances tournent indépendamment : elles sont prévues pour des serveurs jetables, pas pour être pilotées ensuite par astro preview stop ou status.

Le logger atteint enfin les extensions

Un service d'images personnalisé ou un cache provider n'avait que console.warn() pour signaler un format non géré ou une entrée ignorée. Cet appel court-circuite votre niveau de journalisation, votre destination, et même le drapeau --silent. Astro 7.3 passe son logger aux deux points d'extension.

Pour un service d'images, en quatrième argument du hook transform() :

TypeScript
import type { LocalImageService } from 'astro';

const service: LocalImageService = {
  async transform(inputBuffer, transform, imageConfig, logger) {
    logger.warn(`Could not optimize "${transform.src}". Passing it through unchanged.`);
    return { data: inputBuffer, format: 'png' };
  },
};

Pour un fournisseur de cache, sur le contexte de onRequest() :

TypeScript
import type { CacheProvider } from 'astro';

const provider: CacheProvider = {
  name: 'my-cache',
  async onRequest({ request, url, logger }, next) {
    logger.warn(`Skipping cache for ${url.pathname} because the response sets a cookie.`);
    return next();
  },
};

Le service Sharp intégré et le fournisseur memoryCache() d'Astro ont été adaptés : leurs avertissements se comportent désormais comme le reste de la sortie.

finalize() côté Cloudflare

Si vous avez un point d'entrée worker maison, @astrojs/cloudflare expose une fonction finalize() qui applique les cookies et les réglages de cache CDN à la réponse sortant d'un pipeline astro/fetch :

TypeScript
import { astro, FetchState } from 'astro/fetch';
import { cf, finalize } from '@astrojs/cloudflare/fetch';

export default {
  async fetch(request: Request, env: Env, context: ExecutionContext) {
    const state = new FetchState(request);
    const asset = await cf(state, env, context);
    if (asset) return asset;
    return finalize(state, await astro(state));
  },
};

Avec Hono, le middleware @astrojs/cloudflare/hono applique déjà ces en-têtes : rien à appeler.

À retenir

  1. astro preview --ignore-lock débloque les suites de tests qui lancent plusieurs prévisualisations.
  2. Vos extensions doivent maintenant utiliser le logger reçu, pas console.warn : c'est la seule façon de respecter --silent et la destination configurée.
  3. Montée de version : npx @astrojs/upgrade, ou npm install astro@latest.

Source : Astro