Aller au contenu

Imports

Astro supporte la plupart des ressources statiques sans aucune configuration requise. Vous pouvez utiliser la directive import n’importe où dans votre projet JavaScript (y compris votre frontmatter d’Astro) et Astro inclura une copie construite et optimisée de cette ressource statique dans votre build final. @import est également prise en charge dans les balises CSS et <style>.

Les types de fichiers suivants sont pris en charge par Astro :

  • Composants Astro (.astro)
  • Markdown (.md, .markdown, etc.)
  • JavaScript (.js, .mjs)
  • TypeScript (.ts, .tsx)
  • Paquets NPM
  • JSON (.json)
  • JSX (.jsx, .tsx)
  • CSS (.css)
  • Modules CSS (.module.css)
  • Images et actifs (.svg, .jpg, .png, etc.)

De plus, vous pouvez étendre Astro pour ajouter le support de différents Frameworks UI comme React, Svelte et Vue. Vous pouvez également installer l’intégration Astro MDX et utiliser les fichiers .mdx dans votre projet.

Vous pouvez placer n’importe quelle ressource statique dans le répertoire public/ de votre projet, et Astro le copiera directement dans votre version finale sans y toucher. Les fichiers dans le répertoire public/ ne sont pas construits ou regroupés par Astro, ce qui signifie que n’importe quel type de fichier est supporté. Vous pouvez référencer un fichier public/ par un chemin d’URL directement dans vos modèles HTML.

Astro utilise ESM, la même syntaxe import et export que celle utilisée dans le navigateur.

import { getUser } from './user.js';

JavaScript peut être importé en utilisant la syntaxe normale d’importation et d’exportation d’ESM.

import { getUser } from './user.ts';
import type { UserType } from './user.ts';

Astro comprend un support intégré pour [TypeScript] (https://www.typescriptlang.org/). Vous pouvez importer des fichiers .ts et .tsx directement dans votre projet Astro, et même écrire du code TypeScript directement dans votre script de composant Astro et n’importe quelle balise de scripts.

Astro n’effectue aucune vérification de type lui-même. La vérification de type doit être prise en charge en dehors d’Astro, soit par votre IDE, soit par un script séparé. Pour vérifier le type des fichiers Astro, la commande astro check est fournie.

import { MyComponent } from './MyComponent.jsx';

Astro inclut un support intégré pour les fichiers JSX (*.jsx et *.tsx) dans votre projet. La syntaxe JSX est automatiquement transposée en JavaScript.

Bien qu’Astro comprenne la syntaxe JSX dans sa version standard, vous devrez inclure une intégration de framework pour rendre correctement des frameworks tels que React, Preact et Solid. Consultez notre guide Utilisation des intégrations pour en savoir plus.

Si vous avez installé un paquet NPM, vous pouvez l’importer dans Astro.

---
import { Icon } from 'astro-icon';
---

Si un paquet a été publié en utilisant un ancien format, Astro essaiera de convertir le paquet en ESM pour que les déclarations import fonctionnent. Dans certains cas, vous devrez ajuster votre config vite pour que cela fonctionne.

// Charge l'objet JSON via l'export par défaut
import json from './data.json';

Astro prend en charge l’importation de fichiers JSON directement dans votre application. Les fichiers importés retournent l’objet JSON complet dans l’importation par défaut.

// Charge et intègre 'style.css' sur la page
import './style.css';

Astro prend en charge l’importation de fichiers CSS directement dans votre application. Les styles importés ne nécessitent pas d’exportations, mais l’importation d’un style ajoutera automatiquement ce style à la page. Cela fonctionne pour tous les fichiers CSS par défaut, et peut prendre en charge les langages CSS compilés comme Sass et Less via des plugins.

// 1. Convertit les noms de classes './style.module.css' en valeurs uniques, portées.
// 2. Retourne un objet qui associe les noms de classes d'origine à leur valeur portée finale.
import styles from './style.module.css';
// Cet exemple utilise JSX, mais vous pouvez utiliser les modules CSS avec n'importe quel Framework.
return <div className={styles.error}>Votre message d'erreur</div>;

Astro supporte les modules CSS en utilisant la convention de dénomination [nom].module.css. Comme tout fichier CSS, l’importation d’un module CSS l’appliquera automatiquement à la page. Cependant, les modules CSS exportent un objet spécial par défaut styles qui fait correspondre vos noms de classe originaux à des identifiants uniques.

Les modules CSS vous aident à renforcer le cadrage et l’isolation des composants sur le frontend grâce à des noms de classe générés de manière unique pour vos feuilles de style.

import imgReference from './image.png'; // imgReference === '/src/image.png'
import svgReference from './image.svg'; // svgReference === '/src/image.svg'
import txtReference from './words.txt'; // txtReference === '/src/words.txt'
// Cet exemple utilise JSX, mais vous pouvez utiliser des références d'importation avec n'importe quel Framework.
<img src={imgReference.src} alt="image description" />;

Toutes les autres ressources qui ne sont pas explicitement mentionnés ci-dessus peuvent être importés via l’import ESM et renverront une référence URL à la ressource finale construite. Cela peut être utile pour référencer des ressources non-JS par URL, comme créer un élément image avec un attribut src pointant vers cette image.

Il peut également être utile de placer des images dans le dossier public/ comme expliqué sur la page de structure du projet.

Un alias est une façon de créer des raccourcis pour vos imports.

Les alias peuvent aider à améliorer l’expérience de développement dans les codebases avec de nombreux dossiers ou importations relatives.

src/pages/about/company.astro
---
import Button from '../../components/controls/Button.astro';
import logoUrl from '../../assets/logo.png?url';
---

Dans cet exemple, un développeur devra comprendre la relation de l’arborescente entre src/pages/about/company.astro, src/components/controls/Button.astro, et src/assets/logo.png. Et si le fichier company.astro devait être déplacé, ces importations devraient également être mises à jour.

Vous pouvez ajouter des alias d’importation à partir de tsconfig.json ou jsconfig.json.

tsconfig.json
{
"compilerOptions": {
"baseUrl": ".",
"paths": {
"@components/*": ["src/components/*"],
"@assets/*": ["src/assets/*"]
}
}
}

Le serveur de développement redémarrera automatiquement après ce changement de configuration. Vous pouvez maintenant importer en utilisant les alias n’importe où dans votre projet :

src/pages/about/company.astro
---
import Button from '@components/controls/Button.astro';
import logoUrl from '@assets/logo.png?url';
---

Ces alias sont également intégrés automatiquement dans VS Code et d’autres éditeurs de code.

Astro.glob() est un moyen d’importer plusieurs fichiers à la fois.

Astro.glob() ne prend qu’un seul paramètre : un pattern global relatif correspondant aux fichiers locaux que vous souhaitez importer. Il est asynchrone et renvoie un tableau des exportations de chaque fichier correspondant.

src/components/my-component.astro
---
// importe tous les fichiers qui se terminent par `.md` dans `./src/pages/post/`
const posts = await Astro.glob('../pages/post/*.md');
---
<!-- Rend un <article> pour les 5 premiers articles du blog -->
<div>
{posts.slice(0, 4).map((post) => (
<article>
<h2>{post.frontmatter.title}</h2>
<p>{post.frontmatter.description}</p>
<a href={post.url}>Lire plus</a>
</article>
))}
</div>

Les composants Astro importés avec Astro.glob sont de type AstroInstance. Vous pouvez effectuer le rendu de chaque instance de composant en utilisant sa propriété default :

src/pages/component-library.astro
---
// importe tous les fichiers qui se terminent par `.astro` dans `./src/components/`
const components = await Astro.glob('../components/*.astro');
---
<!-- Affiche tous nos composants -->
{components.map((component) => (
<div>
<component.default size={24} />
</div>
))}

Un pattern global est un chemin d’accès à un fichier qui prend en charge les caractères génériques spéciaux. Il est utilisé pour référencer plusieurs fichiers dans votre projet en même temps.

Par exemple, le pattern global ./pages/**/*.{md,mdx} commence dans le sous-répertoire pages, et regarde dans tous ses sous-répertoires (/**), et correspond à tous les noms de fichier (/*) qui finissent soit par .md ou .mdx (.{md,mdx}).

Pour être utilisé avec Astro.glob(), le pattern global doit être une chaîne littérale et ne peut pas contenir de variables. Voir le guide de dépannage pour une solution de contournement.

En outre, les motifs globaux doivent commencer par l’un des éléments suivants :

  • ./ (pour commencer dans le répertoire actuel)
  • ../ (pour démarrer dans le répertoire parent)
  • / (pour démarrer à la racine du projet)

En savoir plus sur la syntaxe des motifs globaux.

Les collections de contenu fournissent une API getCollection() pour charger plusieurs fichiers au lieu de Astro.glob(). Si vos fichiers de contenu (par exemple Markdown, MDX, Markdoc) sont situés dans des collections dans le répertoire src/content/, utilisez getCollection() pour interroger une collection et retourner les entrées de la collection.

// Charge et initialise le fichier WASM demandé
const wasm = await WebAssembly.instantiateStreaming(fetch('/example.wasm'));

Astro permet de charger des fichiers WASM directement dans votre application en utilisant l’API WebAssembly du navigateur.

Nous encourageons les utilisateurs d’Astro à éviter les “Built-in” Node.js (fs, path, etc.) dans la mesure du possible. Astro est compatible avec de nombreux moteurs d’exécution utilisant des adaptateurs. Cela inclut Deno et Cloudflare Workers qui ne supportent pas les modules intégrés de Node tels que fs.

Notre objectif est de fournir des alternatives Astro aux composants Node.js les plus courants. Cependant, aucune alternative de ce type n’existe aujourd’hui. Donc, si vous avez vraiment besoin d’utiliser ces modules Built-in, nous ne voulons pas vous en empêcher. Astro supporte les modules Built-in de Node.js en utilisant le préfixe node: de Node. Si vous voulez lire un fichier, par exemple, vous pouvez le faire comme ceci :

src/components/MyComponent.astro
---
// Exemple : importation de l'intégration "fs/promises" de Node.js
import fs from 'node:fs/promises';
const url = new URL('../../package.json', import.meta.url);
const json = await fs.readFile(url, 'utf-8');
const data = JSON.parse(json);
---
<span>Version : {data.version}</span>

Extension de la prise en charge des types de fichiers

Titre de la section Extension de la prise en charge des types de fichiers

Avec Vite et les plugins Rollup compatibles, vous pouvez importer des types de fichiers qui ne sont pas pris en charge nativement par Astro. Pour savoir où trouver les plugins dont vous avez besoin, consultez la section Finding Plugins de la documentation Vite.