Gatsby: Colorier la syntaxe avec react-prism-renderer

Gatsby: Colorier la syntaxe avec react-prism-renderer

J’écris des tutoriels pour des langages de programmation différents.

Comme j’utilise Gatsby, pour montrer de code coloré, on peut employer react-prism-renderer . C’est un bon plugiciel pour le faire. Par défaut, il vient avec une grande variété de coding languages actifs. C’est mon composant pour enseigner mes *snippets *de code dans mon blogue.

Mais quand j’écrivais des blocs de code, certains n’étaient pas colorés. Qu’est-ce qui est passé?

Mise à jour 2023: J’ai changé le composant à Shiki

🧱 Mon composant pour colorer le code

React prism renderer utilise PrismJS, et on peut le profiter. On doit importer le langage qu’on a besoin de colorer.

Ceci le code. Avec ce snippet, on peut créer un composant React dans Gatsby. Faire attention des lignes avec require.

import React, { ReactElement, useContext } from "react";
import Highlight, { defaultProps, Language } from "prism-react-renderer";
// Ajouter des thèmes pour Prism
import nightOwlNight from "prism-react-renderer/themes/nightOwlLight";
import nightOwl from "prism-react-renderer/themes/nightOwl";
import Prism from "prism-react-renderer/prism";
// Un fichier personnel pour valider le mode clair ou obscur dans mon blogue, tu peux le supprimer
import { ThemeContext } from "../Layout";
// On va importer les langages dont on a besoin
require("prismjs/components/prism-php");
require("prismjs/components/prism-ruby");
require("prismjs/components/prism-yaml");
require("prismjs/components/prism-docker");
require("prismjs/components/prism-bash");
require("prismjs/components/prism-ignore");
interface Props {
children?: string;
className: string;
}
const Code = ({ children, className }: Props): ReactElement => {
const context = useContext(ThemeContext);
const language = (className.replace(/language-/, "") || "") as Language;
return (
<Highlight
{...defaultProps}
theme={context.isLightTheme ? nightOwlNight : nightOwl}
code={children}
language={language}
>
{({ className, style, tokens, getLineProps, getTokenProps }) => (
<pre className={`${className} overflow-x-auto`} data-testid="code-highlight" style={{ ...style }}>
{tokens.map((line, index) => {
const lineProps = getLineProps({ line, key: index });
return (
<div key={index} {...lineProps}>
{line.map((token, key) => (
<span key={key} {...getTokenProps({ token, key })} />
))}
</div>
);
})}
</pre>
)}
</Highlight>
);
};
export default Code;

Donc, si tu utilises MDX ou similaires pour créer tes pages. Tu peux écrire le composant comme suit.

import { MDXProvider } from "@mdx-js/react";
import { MDXRenderer } from "gatsby-plugin-mdx";
import Code from "../components/Mdx/Code"; // Le composant qu'on a crée
const MyCode = (props: { children: string; className: string }) => <Code {...props} />;
<MDXProvider components={{ code: MyCode }}>
<MDXRenderer>{mdx.body}</MDXRenderer>
</MDXProvider>;

Et puis, toutes tes balises HTML <code> auront son code coloré

🎙 Qu’est-ce que ce code fait?

Le composant <Highlight/> est utilisé par React Prism Renderer pour ajouter de la couleur à la syntaxe du code.

Certains langages devront être ajoutés explicitement. Je recommande de vérifier le dossier /node_modules/prismjs/components/ pour plus d’information.

require("prismjs/components/prism-php");
require("prismjs/components/prism-ruby");
require("prismjs/components/prism-yaml");
require("prismjs/components/prism-docker");
require("prismjs/components/prism-bash");
require("prismjs/components/prism-ignore");

Le lien originel dont j’ai pris la solution: ici . Ce tutoriel élargit cette réponse.

Le code d’exemple pour être obsolète dans le futur. Jette un coup d’œil à mon composant ici .

Mes articles ne sont pas generés par l'IA, cependant ils pourrait y être corrigés. Le premier brouillon est ma création originale

Tags

Auteur

Écrit par Helmer Davila

Dans d'autres langues

For different coding languages

Gatsby: Code syntax highlighting with react-prism-renderer

Para diferentes lenguajes de programación

Gatsby: colorizar código usando react-prism-renderer

Articles connexes

Astro est principalement un générateur de sites statiques. Il organise la structure de la façon dont tes pages sont générées en HTML une fois, en utilisant des composants, et il se charge ensuite de la création de contenu.

J’ai migré mon blog de Gatsby et React à AstroJS et Preact

J'avais lu des nombreux avantages de Vitest, tels que la vitesse, la facilité de migration depuis Jest et l’implémentation d’une configuration simple pour intégrer Typescript.

J’ai changé tous mes tests de Jest à Vitest en moins de 3 heures