Installer Remix et Strapi 5 pour l’e-commerce
Mise en place du projet Remix et initialisation de Strapi 5 avec la configuration de base.
Installer Remix et Strapi 5 pour l’e-commerce
Dans ce chapitre, tu vas mettre en place ton frontend avec Remix et ton backend avec Strapi 5. À la fin, tu pourras lancer une appli Remix qui consomme l’API Strapi pour afficher des produits. Allez, on s’y met !
Créer le projet Remix
Générer l’app Remix
1npx create-remix@latest frontend2? Where to create your app: ./frontend3? TypeScript or JavaScript: TypeScript4? Server entry file type: remix.config.js5? Deploy target: Remix App Server
1cd frontend2npm install3npm run dev
Tip
Pars la doc des loaders Remix pour comprendre comment fetcher des données côté serveur.
Structure du projet
1frontend/2├── app/3│ ├── entry.client.tsx4│ ├── entry.server.tsx5│ ├── root.tsx6│ └── routes/7│ └── index.tsx8├── public/9├── remix.config.js10├── package.json11└── tsconfig.json
Monorepo optionnel
Tu peux aussi organiser ton frontend et ton backend en monorepo :
1/apps/frontend2/apps/backend
Port collision
Remix démarre sur le port 3000 et Strapi sur le 1337 par défaut : choisis bien ou ajoute un proxy.
Créer le projet Strapi 5
Initialiser Strapi
1npm create strapi@5 backend --quickstart
Cette commande :
- installe Strapi 5 et ses plugins de base
- configure SQLite par défaut
- lance Strapi en mode dev
Aperçu du package.json
1{2"name": "backend",3"private": true,4"scripts": {5"develop": "strapi develop", // ^? démarre Strapi en mode dev6"start": "strapi start" // ^? build + start en prod7},8"dependencies": {9"@strapi/strapi": "5.0.0",10"@strapi/plugin-users-permissions": "5.0.0",11"better-sqlite3": "9.4.3"12}13}
Configurer les variables d’environnement
1DATABASE_CLIENT=sqlite2DATABASE_FILENAME=./data/db.sqlite3STRAPI_JWT_SECRET=ta-clef-super-secrete
Tip
Génére un STRAPI_JWT_SECRET avec :
1openssl rand -hex 32
Lancer Strapi
1cd backend2npm run develop
Tu peux maintenant accéder à l’admin Strapi sur http://localhost:1337/admin et créer ta première collection (Produits, Catégories, …).
Connecter Remix à Strapi
Définir l’URL de l’API
Dans frontend, crée un fichier .env :
1STRAPI_API_URL=http://localhost:1337/api
Tip
N’oublie pas d’ajouter frontend/.env et backend/.env à ton .gitignore.
Exemple de loader Remix
Dans app/routes/index.tsx, on va récupérer la liste des produits :
1import type { LoaderFunction } from "@remix-run/node";2import { json, useLoaderData } from "@remix-run/react";34export const loader: LoaderFunction = async () => {5const res = await fetch(6`${process.env.STRAPI_API_URL}/products?populate=images`7);8// @callout: on récupère tous les produits et leurs images9const data = await res.json();10return json(data);11};1213export default function Index() {14const { data } = useLoaderData<typeof loader>();15return (16<main>17<h1>Nos produits</h1>18<ul>19{data.map((p: any) => (20<li key={p.id}>{p.attributes.name}</li>21))}22</ul>23</main>24);25}
Remix & React Router
Les routes Remix reposent sur React Router, mais enrichies de loaders et d’actions.
Revalidation (cache)
Pour forcer Remix à recharger l’API toutes les X secondes :
1export const loader: LoaderFunction = async () => {2const res = await fetch(3`${process.env.STRAPI_API_URL}/products`,4{ next: { revalidate: 60 } }5);6return json(await res.json());7};
Exercices rapides
- Créer une collection
Dans Strapi, ajoute une collectionCategoriesavec un champtitre. - Lister les catégories
Créeapp/routes/categories.tsxet utilise un loader pour fetcher/categories. - Styler avec Tailwind
Installe Tailwind CSS dans Remix et ajoute un design simple à ta liste.
Ready ? Dans le prochain chapitre, tu verras comment gérer l’authentification et les permissions avec Strapi et Remix !