erwannrousseau.dev

GitHubLinkedIn
post image Comment utiliser Shiki 式 Syntax highlighter avec NextJS et Tailwind

Comment utiliser Shiki 式 Syntax highlighter avec NextJS et Tailwind

Créez votre projet Next.js

Avant toute chose, si vous n'avez pas encore de projet Next.js, démarrez avec une commande magique :

Vous pouvez ensuite répondre au question du bootstrap

Et voilà, vous avez un projet tout frais, prêt à développer un CodeBlock aux petits oignons.

Téléchargez les fichiers de votre thème VS Code préféré

Allez dans votre éditeur VS Code et trouver votre thème favoris. Un big shout-out au créateur de Pace Theme pour ce magnifique style !

Ensuite, copiez les fichiers de thème, en json, vers votre projet Next.js, par exemple dans lib/themes.

Placez-les dans un dossier dédié pour garder votre structure de fichiers propre. Par exemple, ici pour un dual theme :

./lib/themes/dark.json et ./lib/themes/light.json

Installez Shiki

Créez une fonction highlightCode

Maintenant, attaquons-nous à l'essentiel, une fonction highlightCode qui va transformer votre code en une œuvre d’art. Ajoutez ce petit bijoux :

Typescript
lib/highlight-code.ts

Créez un composant Server pour injecter le code stylisé

Maintenant, créons un composant qui va nous permettre d’injecter tout ce code avec style dans notre page ! Créez code-block.tsx dans votre dossier components :

TSX
code-block.tsx

Créez un composant wrapper Client Side pour un style au top

On va ajouter un wrapper client pour donner un peu de vie au bloc de code avec une option de copie, des défilements, et autres bonus sympas. Voici CodeBlockWrapper :

TSX
code-block-wrapper.tsx

Configurer le thème sombre et clair pour Shiki

Avant d'utiliser notre composant CodeBlockWrapper, il nous faut ajouter un peu de CSS pour que les thèmes sombre et clair s'adaptent automatiquement.

Ajoutez ce code dans votre fichier CSS global :

Utilisez le composant et admirez

Enfin, le moment est venu de voir le résultat ! Appelez CodeBlockWrapper, passez-lui votre code, et admirez le rendu:

PS : tous les blocs de code de mon portfolio sont générés comme ça ! Pas mal, non ?

Et voilà ! Votre code est maintenant prêt à briller avec Shiki, et dans le thème de votre choix. 🎉

Si vous voulez aller plus en profondeur dans le code, voici le repo de mon portfolio où j'explique exactement comment j'ai fait : components/utils/code-block-wrapper.tsx