this post was submitted on 04 Jun 2026
7 points (100.0% liked)

Forum Libre

1358 readers
15 users here now

Partagez et discutez de sujets positifs ou liés à votre quotidien, tels que:

Les mots d'ordre sont : respect et bienveillance, l'objectif est de proposer un environnement positif et tranquille.

Les discussions politiques ou pouvant provoquer des émotions négatives sont déconseillées, et ont davantage leur place sur

Les règles de l'instance sont bien entendu d'application.

Fils hebdomadaires"

"Demandez-moi n'importe quoi"

Communautés détendues

Communautés liées:

Loisirs:

Vie Pratique:

Communautés d'actualité

Société:

Pays:

Communauté de secours:

Communautés principales de l'instance

Nous rejoindre sur Zulip: https://jlailu.zulipchat.com/

founded 2 years ago
MODERATORS
 

Envie de poster une question technique sur du matériel ou du logiciel ?
Allez, viens !

you are viewing a single comment's thread
view the rest of the comments
[–] BlackEco@lemmy.blackeco.com 1 points 1 week ago

La semaine dernière, je demandais comment avoir des images optimisées dans du MDX avec Astro sans avoir à importer directement les images dans le MDX.

Au final ma solution a été :

  1. De créer un composant Image custom qui importe dynamiquement les images (avec une pincée de ComponentProps pour que ça marche en TypeScript)
***
import { Image } from "astro:assets";
import type { ComponentProps } from "astro/types";

type Props = Omit<ComponentProps<typeof Image>, "src"> & {
  src: string;
};
const { src, ...props } = Astro.props;

const images = import.meta.glob<{ default: ImageMetadata }>("/src/assets/img/**/*.{jpeg,jpg,png,gif,svg}");
***

{/* @ts-expect-error */}
<Image src={images[src]()} {...props} />
  1. De remplacer l'élément img par mon composant custom quand je rends le contenu
***
import { getEntry, render } from "astro:content";
import CustomImage from "@components/CustomImage.astro";

const { slug } = Astro.params;
const entry = await getEntry("blog", slug);

const { Content } = await render(entry);
***

<Content
    components={{
        img: CustomImage,
    }}
/>

Par contre, ça ne marche évidemment que dans les Content Collections, pour les fichiers MDX directement dans src/pages, il faudra importer les images directement, mais c'est déjà moins gênant.